日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

数据结构之插入排序:希尔排序(缩小增量排序)

發布時間:2025/3/15 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之插入排序:希尔排序(缩小增量排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排序算法:希爾排序、縮小增量排序

  • 思維導圖:
  • 希爾排序的定義:
  • 例:
  • 希爾排序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)
不穩定
適用于順序存儲 (對數組下標進行操作)

總結

以上是生活随笔為你收集整理的数据结构之插入排序:希尔排序(缩小增量排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。