#include <stdio.h>
#include <time.h>
#define NUM 80000
#define RANGE 80008
void insert(int* arr, int l, int n, int step) {
for (int i = l + step; i < n; i += step) {
int j = i;
while (j > l && arr[j] < arr[j - step]) {
int t = arr[j];
arr[j] = arr[j - step];
arr[j - step] = t;
j--;
}
}
return;
}
void shell_hibbard(int* arr, int n) {
int step = 1;
while (step <= n / 2) step = step * 2 + 1;
do {
step /= 2;
for (int i = 0; i < step; i++) {
insert(arr, i, n, step);
}
} while (step > 1);
return;
}
int main() {
int arr[NUM] = { 0 };
srand(time(0));
for (int i = 0; i < NUM; i++) {
arr[i] = rand() % RANGE;
}
shell_hibbard(arr, NUM);
for (int i = 0; i < NUM; i++) {
printf("%d ", arr[i]);
}
return 0;
}
希尔排序-Hibbard增量序列(C语言)
于 2023-09-08 19:49:54 首次发布