- . 堆排序
【问题描述】请用堆排序的方法对一组数据进行排序,并给出建堆以及每一趟堆排序的结果。
【输入形式】一组数据,以0作为输入的结束。
【输出形式】建大根堆的结果,以及每一趟堆排序的结果。
【样例输入】
8 3 6 1 68 12 0
【样例输出】
68 8 12 1 3 6
12 8 6 1 3 68
8 3 6 1 12 68
6 3 1 8 12 68
3 1 6 8 12 68
1 3 6 8 12 68
【样例输入】
12 9 26 11 38 52 99 27 66 15 32 0
【样例输出】
99 66 52 27 38 12 26 9 11 15 32
66 38 52 27 32 12 26 9 11 15 99
52 38 26 27 32 12 15 9 11 66 99
38 32 26 27 11 12 15 9 52 66 99
32 27 26 9 11 12 15 38 52 66 99
27 15 26 9 11 12 32 38 52 66 99
26 15 12 9 11 27 32 38 52 66 99
15 11 12 9 26 27 32 38 52 66 99
12 11 9 15 26 27 32 38 52 66 99
11 9 12 15 26 27 32 38 52 66 99
9 11 12 15 26 27 32 38 52 66 99
#includeusing namespace std; void heapify(int *arr, int n, int i) { int largest = i; int l = 2 * i + 1, r = 2 * i + 2; if (arr[l] > arr[largest] && l < n) largest = l; if (arr[r] > arr[largest] && r < n) largest = r; if (i != largest) { swap(arr[i], arr[largest]); heapify(arr, n, largest); } } void print(int *arr, int n) { for (int i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; } void create_and_sort(int *arr, int n) { for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); print(arr, n); for (int i = n - 1; i > 0; i--) { swap(arr[i], arr[0]); heapify(arr, i, 0); print(arr, n); } } int main() { int a[500]; int len = 0; while (1) { int data; cin >> data; if (data) { a[len++] = data; } else break; } create_and_sort(a, len); }



