#include <stdio.h>
#include <stdlib.h>
void shellSort(int data[], int n) { //n=7
int *delta, k, i, t, dk, j;
k = n;
delta = (int *)malloc(sizeof(int) * (n / 2)); //分配一块大小为 n/2 个整数的空间
i = 0;
do {
k /= 2;
delta[i ++] = k;
} while (k > 1);
i = 0;
while ((dk = delta[i]) > 0) {
for (k = delta[i]; k < n; ++k) {
if (data[k - dk] > data[k]) {
t = data[k];
for (j = k - dk; j >= 0 && t < data[j]; j -= dk) {
data[j + dk] = data[j];
}
data[j + dk] = t;
}
}
++ i;
}
}
int main() {
int n = 7;
int data[] = {15, 9, 7, 8, 20, -1, 4};
shellSort(data, n);
for (int i = 0; i < n; i++) {
printf("%d ", data[i]);
}
return 0;
}
希尔排序算法
于 2024-10-04 15:42:14 首次发布