为什么希尔排序会出来,主要是为了弥补插入排序的缺点,插入排序它的最好的时间复杂的为O(n),但如果一开始是一个逆序出来让我们排,那时间复杂度就是O(n^2)了,因为每次排,都会移动所经过的数。
希尔排序其实也是插入排序的变形,就是在做最后一部插入排序之前,做一个预排序,使它先接近有序,然后再排。
void shellSort(int* a, int size) { int gap = size; while (gap > 1) { gap = gap / 3 + 1; for (int i = 0; i < size - gap; i++) { int end = i; int x = a[end + gap]; while (end >= 0) { if (a[end] > x) { a[end + gap] = a[end]; end = end - gap; } else { break; } } a[end + gap] = x; } } }
void MyPrint(int* a, int sz)//打印数组 { for (int i = 0; i < sz; i++) { printf("%d ", a[i]); } printf("n"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)