堆排序 【问题描述】请用堆排序的方法对一组数据进行排序,并给出建堆以及每一趟堆排序的结果。 【输入形式】一组数据,以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 c语言或c++语言编写代码
时间: 2024-01-03 14:05:50 浏览: 33
C++代码实现:
```cpp
#include <iostream>
using namespace std;
void max_heapify(int arr[], int start, int end) {
int dad = start;
int son = dad * 2 + 1;
while(son <= end) { // 若子节点存在
if(son + 1 <= end && arr[son] < arr[son + 1]) {
son++; // 选择左右孩子中的较大值
}
if(arr[dad] > arr[son]) {
return; // 若父节点已经大于子节点,则无需进行交换
} else {
swap(arr[dad], arr[son]); // 否则交换父子节点
dad = son;
son = dad * 2 + 1;
}
}
}
void heap_sort(int arr[], int len) {
for(int i = len / 2 - 1; i >= 0; i--) { // 建大根堆
max_heapify(arr, i, len - 1);
}
for(int i = len - 1; i > 0; i--) { // 堆排序
swap(arr[0], arr[i]); // 将当前最大值放到数组末尾
max_heapify(arr, 0, i - 1); // 调整剩余数组的堆结构
}
}
int main() {
int arr[100], n = 0;
while(cin >> arr[n] && arr[n] != 0) { // 输入数据,以0作为结束标志
n++;
}
heap_sort(arr, n); // 堆排序
for(int i = 0; i < n; i++) { // 输出排序后的结果
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
相关推荐
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)