希尔排序的介绍与分析

来源:互联网 发布:vscode c 开发环境 编辑:程序博客网 时间:2024/06/05 19:29

希尔排序跟直接插入排序很像,相当于每次把数列分成若干个区间进行直接插入排序

void shell_sort(int* a, int n){int gap = n / 2; //gap分割待排序的序列,开始等于数组大小的一半,然后每次除以二,如果gap一直是1就相当于直接插入排序了while (gap != 0){for (int i = gap; i < n; ++i) //对所有相隔gap位置的元素进行直接插入排序{int j = i - gap;int temp = a[i];while (j >= 0 && a[j] > temp){a[j + gap] = a[j];j = j - gap;}a[j + gap] = temp;}gap = gap / 2; //每次减半,当gap == 1时相当于序列所有值进行直接插入排序}}


由于希尔排序的gap选择不一定,导致其时间复杂度比较难分析

一般取时间复杂度:O(n^(1.3))

空间复杂度:O(1)

原创粉丝点击