数据结构排序----希尔排序

版权声明:[email protected] https://blog.csdn.net/qq_271334644/article/details/88342420

希尔排序

利用越有序,插排效率越大的特性,

再进行插排之前进行预排序,让数列尽可能的有序

对数列进行依次分组插排

时间复杂度
最好(O(n)) | 平均(O(n^1.3) | 最差O(n^2)

 空间复杂度 O(1)

 稳定性:不稳定    (相同的数,没法保证分在一个分组)

程序实现

扫描二维码关注公众号,回复: 6180944 查看本文章
#include<stdio.h>
void InsertSortWithGap(int array[], int size, int gap) {
	// for (int i = gap; i < size; i++) {
	for (int i = 0; i < size; i++) {
		int key = array[i];
		int j;
		for (j = i - gap; j >= 0 && array[j] > key; j -= gap) {
			array[j + gap] = array[j];
		}

		array[j + gap] = key;
	}
}
void ShellSort(int array[], int size) {
	int gap = size;
	while (1) {
		gap = (gap / 3) + 1;
		InsertSortWithGap(array, size, gap);
		if (gap == 1) {
			break;
		}
	}
}
int main() {
	int array[] = { 3, 9, 1, 4, 7, 8, 3, 5 };
	int size = sizeof(array) / sizeof(int);
	ShellSort(array, size);
	for (int i = 0; i < size; i++) {
		printf("%d ", array[i]);
	}
	printf("\n");
}

猜你喜欢

转载自blog.csdn.net/qq_271334644/article/details/88342420