當(dāng)前位置:
首頁 >
数据结构之插入排序:希尔排序(缩小增量排序)
發(fā)布時(shí)間:2025/3/15
30
豆豆
生活随笔
收集整理的這篇文章主要介紹了
数据结构之插入排序:希尔排序(缩小增量排序)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
排序算法:希爾排序、縮小增量排序
- 思維導(dǎo)圖:
- 希爾排序的定義:
- 例:
- 希爾排序d的選取:
- 希爾排序的代碼實(shí)現(xiàn):
- 希爾排序的性能:
思維導(dǎo)圖:
希爾排序的定義:
普通的插入算法正序時(shí)時(shí)間復(fù)雜度會很小,但是逆序時(shí)時(shí)間復(fù)雜度會很高,為了解決這個(gè)問題,產(chǎn)生了希爾排序
先將整個(gè)排序表分成d個(gè)子表分別排序,然后再對全體直接插入排序
每個(gè)子表經(jīng)過一次排序之后未必是有序的,只是比初始子表序列更接近有序
第一趟:
第二趟:
第三趟:
例:
希爾排序d的選取:
每次對半取
希爾排序的代碼實(shí)現(xiàn):
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]); }希爾排序的性能:
時(shí)間復(fù)雜度: O(n2) (在某些情況他的時(shí)間復(fù)雜度可以為O(n^1.3))
空間復(fù)雜度: O(1)
不穩(wěn)定
適用于順序存儲 (對數(shù)組下標(biāo)進(jìn)行操作)
總結(jié)
以上是生活随笔為你收集整理的数据结构之插入排序:希尔排序(缩小增量排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.1 Java程序的构成
- 下一篇: 计组之数据运算:2、奇偶校验码、海明校验