3) 分别用堆排序及快速排序算法,对待排序记录进行排序并输出排序结果的C语言代码
时间: 2024-05-06 07:16:29 浏览: 80
堆排序算法的C语言代码如下:
```c
// 堆排序
void heap_sort(int arr[], int len) {
// 构建大根堆,从最后一个非叶子节点开始调整
for (int i = len / 2 - 1; i >= 0; i--) {
adjust_heap(arr, i, len);
}
// 交换堆顶元素和末尾元素,缩小堆范围并重新调整
for (int i = len - 1; i > 0; i--) {
swap(&arr[0], &arr[i]);
adjust_heap(arr, 0, i);
}
}
// 调整大根堆
void adjust_heap(int arr[], int i, int len) {
int temp = arr[i];
for (int k = i * 2 + 1; k < len; k = k * 2 + 1) {
if (k + 1 < len && arr[k] < arr[k + 1]) {
k++;
}
if (arr[k] > temp) {
arr[i] = arr[k];
i = k;
} else {
break;
}
}
arr[i] = temp;
}
// 交换元素
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
快速排序算法的C语言代码如下:
```c
// 快速排序
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);
}
}
```
阅读全文