数据结构之插入排序:希尔排序(缩小增量排序)
生活随笔
收集整理的這篇文章主要介紹了
数据结构之插入排序:希尔排序(缩小增量排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
排序算法:希爾排序、縮小增量排序
- 思維導圖:
- 希爾排序的定義:
- 例:
- 希爾排序d的選取:
- 希爾排序的代碼實現:
- 希爾排序的性能:
思維導圖:
希爾排序的定義:
普通的插入算法正序時時間復雜度會很小,但是逆序時時間復雜度會很高,為了解決這個問題,產生了希爾排序
先將整個排序表分成d個子表分別排序,然后再對全體直接插入排序
每個子表經過一次排序之后未必是有序的,只是比初始子表序列更接近有序
第一趟:
第二趟:
第三趟:
例:
希爾排序d的選取:
每次對半取
希爾排序的代碼實現:
void ShellSort(int a[],int n){int j;for(int dk = n/2;dk >= 1;dk = dk / 2 ) //每趟希爾排序的步長d for(int i=dk+1;i<=n;i++) //對所有的組一起直接插入排序if(a[i] < a[i-dk]){a[0] = a[i];for(j=i-dk;j>0&&a[0]<a[j];j-=dk) //判斷后移a[j+dk] = a[j];a[j+dk] = a[0];}//if } int main(){int i;int a[5] = {NULL,3,9,6,8};ShellSort(a,4);for(i=1;i<5;i++)printf("%d\t",a[i]); }希爾排序的性能:
時間復雜度: O(n2) (在某些情況他的時間復雜度可以為O(n^1.3))
空間復雜度: O(1)
不穩定
適用于順序存儲 (對數組下標進行操作)
總結
以上是生活随笔為你收集整理的数据结构之插入排序:希尔排序(缩小增量排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.1 Java程序的构成
- 下一篇: 计组之数据运算:2、奇偶校验码、海明校验