/* * 希尔排序 * 它是一种改进的插入排序 * 取一个小于n的增量d,然后将所有距离为d的分为一组,进行插入排序 * 然后增量减小,但是最后一个增量d=1 * 稳定性:不稳定 * 空间复杂度:O(1) * 时间复杂度:最好O(n) 最差O(n2) 平均O(n2) */ void ShellPass(int a[], int n, int d) { int temp, j; for(int i=d; i<n; i++) { j = i; temp = a[i]; while(a[j] < a[j-d] && j >= 0) { a[j] = a[j-d]; j = j - d; } a[j] = temp; } } /* * 希尔排序 */ void ShellSort(int a[], int n) { int d = n; do { d = d / 3 + 1; ShellPass(a, n, d); } while(d > 1); } int main() { int a[] = {3, 8, 15, 7, 21, 6}; ShellSort(a, 6); for(int i=0; i<6; i++) { cout << a[i] << " "; } cout << endl; system("pause"); return 0; }