c语言代码分别用堆排序及快速排序算法,对待排序记录进行排序并输出排序结果。
时间: 2024-05-13 19:18:57 浏览: 7
下面是用堆排序和快速排序算法实现的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 堆排序
void heap_sort(int arr[], int len) {
int i, temp;
for (i = len / 2 - 1; i >= 0; i--) {
heap_adjust(arr, i, len - 1);
}
for (i = len - 1; i > 0; i--) {
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heap_adjust(arr, 0, i - 1);
}
}
void heap_adjust(int arr[], int i, int len) {
int j, temp;
temp = arr[i];
for (j = 2 * i + 1; j <= len; j = 2 * j + 1) {
if (j < len && arr[j] < arr[j + 1]) {
j++;
}
if (temp >= arr[j]) {
break;
}
arr[i] = arr[j];
i = j;
}
arr[i] = temp;
}
// 快速排序
void quick_sort(int arr[], int left, int right) {
if (left < right) {
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
}
int main() {
int i, len, *arr;
printf("请输入待排序的数组长度:");
scanf("%d", &len);
arr = (int*)malloc(len * sizeof(int));
printf("请输入待排序的数组元素:");
for (i = 0; i < len; i++) {
scanf("%d", &arr[i]);
}
printf("堆排序前:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
heap_sort(arr, len);
printf("堆排序后:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("快速排序前:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quick_sort(arr, 0, len - 1);
printf("快速排序后:\n");
for (i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
```
该程序先让用户输入待排序的数组长度和元素,然后分别用堆排序和快速排序算法对其进行排序,并输出排序结果。