希尔排序-Hibbard增量序列(C语言)

#include 
#include 
#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;
}

你可能感兴趣的:(#,排序,排序算法)