6 questions. Covers Heap sort.
Questions 1 to 5 of 6
Use the arrows to put the steps in order.
cpp #include <cstddef> #include <iostream> #include <utility> #include <vector> void sift_down(std::vector<int>& a, std::size_t size, std::size_t i) { while (true) { std::size_t largest = i; std::size_t left = 2 * i + 1; std::size_t right = 2 * i + 2; if (left < size && a[left] > a[largest]) largest = left; if (right < size && a[right] > a[largest]) largest = right; if (largest == i) return; std::swap(a[i], a[largest]); i = largest; } } int main() { std::vector<int> a = {1, 8, 6, 5, 7}; sift_down(a, 5, 0); for (int x : a) std::cout << x << ' '; std::cout << '\n'; }
build_max_heap
cpp #include <cstddef> #include <iostream> #include <utility> #include <vector> void sift_down(std::vector<int>& a, std::size_t size, std::size_t i) { while (true) { std::size_t largest = i; std::size_t left = 2 * i + 1; std::size_t right = 2 * i + 2; if (left < size && a[left] > a[largest]) largest = left; if (right < size && a[right] > a[largest]) largest = right; if (largest == i) return; std::swap(a[i], a[largest]); i = largest; } } void build_max_heap(std::vector<int>& a) { std::size_t n = a.size(); for (std::size_t i = n / 2; i-- > 0;) { sift_down(a, n, i); } } int main() { std::vector<int> a = {1, 2, 3, 4, 5, 6, 7}; build_max_heap(a); for (int x : a) std::cout << x << ' '; std::cout << '\n'; }
3 question(s) left on this page.