C语言排序算法实现:希尔排序、快速排序和堆排序
由于题目没有给出具体的数据,以下程序仅供参考。
- 希尔排序法
#include <stdio.h>
void shell_sort(int a[], int n) {
int i, j, gap;
for (gap = n / 2; gap > 0; gap /= 2) {
for (i = gap; i < n; i++) {
int temp = a[i];
for (j = i; j >= gap && a[j - gap] > temp; j -= gap) {
a[j] = a[j - gap];
}
a[j] = temp;
}
}
}
int main() {
int a[] = {5, 3, 8, 6, 4};
int n = sizeof(a) / sizeof(int);
shell_sort(a, n);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
- 快速排序算法
#include <stdio.h>
void quick_sort(int a[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = a[left];
while (i < j) {
while (i < j && a[j] >= pivot) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= pivot) {
i++;
}
a[j] = a[i];
}
a[i] = pivot;
quick_sort(a, left, i - 1);
quick_sort(a, i + 1, right);
}
int main() {
int a[] = {5, 3, 8, 6, 4};
int n = sizeof(a) / sizeof(int);
quick_sort(a, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
- 堆排序算法
#include <stdio.h>
void adjust_heap(int a[], int i, int n) {
int j = 2 * i + 1;
int temp = a[i];
while (j < n) {
if (j + 1 < n && a[j] < a[j + 1]) {
j++;
}
if (temp >= a[j]) {
break;
}
a[i] = a[j];
i = j;
j = 2 * i + 1;
}
a[i] = temp;
}
void heap_sort(int a[], int n) {
for (int i = n / 2 - 1; i >= 0; i--) {
adjust_heap(a, i, n);
}
for (int i = n - 1; i > 0; i--) {
int temp = a[0];
a[0] = a[i];
a[i] = temp;
adjust_heap(a, 0, i);
}
}
int main() {
int a[] = {5, 3, 8, 6, 4};
int n = sizeof(a) / sizeof(int);
heap_sort(a, n);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/oSeG 著作权归作者所有。请勿转载和采集!