用堆排序完成对数组a中的10个元素从小到大排序。 void main() { int a[10]={18,26,31,72,8,15,88,72,35,20}; int i; heapSort(a,10);
时间: 2023-10-07 08:14:41 浏览: 32
}抱歉,我可以回答您的第一个问题。以下是使用堆排序算法对数组 a 中的 10 个元素进行从小到大排序的代码:
void heapSort(int arr[], int n)
{
// 构造大根堆
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
// 一个个把堆顶元素(最大值)放到最后
for (int i = n - 1; i >= 0; i--)
{
// 把堆顶元素与当前未排序部分的最后一个元素交换
swap(arr[0], arr[i]);
// 对交换后的未排序部分重新构造大根堆
heapify(arr, i, 0);
}
}
void heapify(int arr[], int n, int i)
{
int largest = i; // 初始化堆的最大值为当前根节点
int l = 2 * i + 1; // 左子节点下标
int r = 2 * i + 2; // 右子节点下标
// 找到根、左子节点、右子节点中的最大值
if (l < n && arr[l] > arr[largest])
largest = l;
if (r < n && arr[r] > arr[largest])
largest = r;
// 如果根节点不是最大值,则交换根节点和最大值
if (largest != i)
{
swap(arr[i], arr[largest]);
// 递归地对交换之后的子树进行堆排序
heapify(arr, n, largest);
}
}
int main()
{
int a[10] = {18, 26, 31, 72, 8, 15, 88, 72, 35, 20};
int n = 10;
heapSort(a, n);
// 输出排序结果
for (int i = 0; i < n; i++)
cout << a[i] << " ";
return 0;
}