《Algorithm算法》笔记:元素排序(2)——希尔排序
生活随笔
收集整理的這篇文章主要介紹了
《Algorithm算法》笔记:元素排序(2)——希尔排序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
《Algorithm算法》筆記:元素排序(2)——希爾排序
- Algorithm算法筆記元素排序2希爾排序
- 希爾排序思想
- 為什么是插入排序
- h的確定方法
- 希爾排序的特點
- 代碼
有關排序的介紹,看上一個筆記:《Algorithms算法》筆記:元素排序(1)——簡單排序
希爾排序是這是本課程中出現(xiàn)的第一個非平凡的排序算法。
希爾排序思想
希爾的思想也很簡單就是一個h-sort的插入算法——每相鄰h個元素進行插入排序
為什么是插入排序?
- 如果h比較大,那么子數(shù)組會很小,用插入效率高
- 如果h很小,這時候數(shù)組基本有序,插入效率高
h的確定方法:
一般常用的是 : h=3h+1 ——兼顧奇偶
希爾排序的特點:
簡單的想法卻導致巨大的性能收益!
- 在實際使用中,對于不是特別大的數(shù)組,排序速度快。
- 代碼量小(可用與嵌入式中)
- 硬件類算法原型
- 通過找更好的遞增數(shù)列可以有更好的性能提升(這是一個新的課題)
代碼:
public class Shell{public static sort(Comparable[] a){int N = a.length();int h = 1;while(h < N/3) //找比n小的最大hh = 3*h+1;do{for(i = h;i < N; i++){for(j = i;j >= h && less(a[j],a[j-h]);j -= h) exch(a,a[j],a[j-h]);}h = h/3; //由于是取整操作所以h/3 == (h-1)/3}while(h > 1)} }注意: 這里的循環(huán)
for(i = h;i < N; i++) for(j = i;j >= h && less(a[j],a[j-h]);j -= h)是用的i從前往后,j從后往前。j也可以用從前往后
for(i = 0;i < N-h; i++) for(j = i;j + h < N && less(a[j+h],a[j]);j += h)轉(zhuǎn)載于:https://www.cnblogs.com/voidsky/p/5373923.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《Algorithm算法》笔记:元素排序(2)——希尔排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Atitit.js模块化 atiImpo
- 下一篇: Postgres数据库备份与还原命令