c语言输入一组关键字,遇到-1标志结束,采用堆排序法将其从小到大排列,输出每一趟排序结果(要求:堆采用顺序表L存储,建大顶堆)。完整代码形式
时间: 2024-12-26 22:30:16 浏览: 9
在 C 语言中,你可以使用堆排序算法对一组整数进行排序,直到遇到 -1 结束。这里是一个简化的示例代码,展示了如何使用顺序表 (数组) 实现堆排序并输出每一步的结果:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void max_heapify(int arr[], int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
largest = left;
if (right < n && arr[right] > arr[largest])
largest = right;
if (largest != i) {
swap(&arr[i], &arr[largest]);
max_heapify(arr, n, largest);
}
}
void heap_sort(int arr[], int n) {
for (int i = n / 2 - 1; i >= 0; i--)
max_heapify(arr, n, i);
for (int i = n - 1; i >= 0; i--) {
// 将最大元素与最后一个元素交换
swap(&arr[0], &arr[i]);
// 保持剩余部分成为大顶堆
max_heapify(arr, i, 0);
printf("After %dth pass: \n", i+1);
for (int j = 0; j <= i; j++) {
printf("%d ", arr[j]);
}
printf("\n");
}
}
// 用于交换两个元素
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int arr[MAX_SIZE];
int size = 0;
printf("Enter integers (-1 to end): ");
while (scanf("%d", &arr[size]) == 1 && arr[size] != -1) {
size++;
}
heap_sort(arr, size);
printf("Sorted array after all passes: \n");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个代码中,`max_heapify` 函数用于维护大顶堆性质,而 `heap_sort` 负责整个排序过程。用户可以逐个输入数字,当输入 -1 时停止,并在每趟排序后打印出序列。
阅读全文