C语言 代码 分别用堆排序及快速排序算法,对待排序记录进行排序并输出排序结果。
时间: 2024-05-09 21:16:26 浏览: 87
排序 算法 快速排序 C语言
以下是使用堆排序和快速排序算法对待排序记录进行排序的 C 代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 交换两个数的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 堆排序
void heapSort(int arr[], int n) {
// 建立大根堆
for (int i = n / 2 - 1; i >= 0; i--) {
int parent = i;
int child = 2 * parent + 1;
while (child < n) {
if (child + 1 < n && arr[child] < arr[child + 1]) {
child++;
}
if (arr[child] > arr[parent]) {
swap(&arr[child], &arr[parent]);
parent = child;
child = 2 * parent + 1;
} else {
break;
}
}
}
// 堆排序
for (int i = n - 1; i > 0; i--) {
swap(&arr[0], &arr[i]);
int parent = 0;
int child = 2 * parent + 1;
while (child < i) {
if (child + 1 < i && arr[child] < arr[child + 1]) {
child++;
}
if (arr[child] > arr[parent]) {
swap(&arr[child], &arr[parent]);
parent = child;
child = 2 * parent + 1;
} else {
break;
}
}
}
}
// 快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] < pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
int arr[] = {4, 2, 7, 1, 9, 3, 5, 8, 6};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数据:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
heapSort(arr, n);
printf("堆排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, 0, n - 1);
printf("快速排序结果:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
运行结果:
```
原始数据:4 2 7 1 9 3 5 8 6
堆排序结果:1 2 3 4 5 6 7 8 9
快速排序结果:1 2 3 4 5 6 7 8 9
```
阅读全文