java 算法之希爾排序詳解及實(shí)現(xiàn)代碼
java 算法之希爾排序
一、思想
希爾排序:使數(shù)組中任意間隔為h的元素都是有序的。在進(jìn)行排序的時(shí)候,如果h很大,我們就能將元素移動(dòng)到很遠(yuǎn)的地方,為實(shí)現(xiàn)更小的h有序創(chuàng)造方便。用這種方式,對(duì)任意以1結(jié)尾的h序列,我們都能夠?qū)?shù)據(jù)排序;
二、概念
h有序數(shù)組:任意間隔為h的元素都是有序的數(shù)組;
三、高效原因
對(duì)于大規(guī)模亂序數(shù)組插入排序很慢,因?yàn)樗粫?huì)交換相鄰的元素,因此元素只能一點(diǎn)一點(diǎn)地從數(shù)組的一端移動(dòng)到另一段;
希爾排序更高效的原因:它權(quán)衡了子數(shù)組的規(guī)模和有序性,在排序之初,各個(gè)子數(shù)組都很短;在排序之后子數(shù)組都是部分有序的,這兩種情況很適合插入排序;
四、代碼
/** * 希爾排序 * * @author pengcx * */ public class Shell extends Sort { public static void main(String[] args) { String[] a = { "d", "a", "w", "b", "q" }; Shell.sort(a); show(a); } /** * 排序數(shù)組a * * @param a * 排序的數(shù)組a */ protected static void sort(Comparable[] a) { int N = a.length; int h = 1; while (h < N / 3) { h = 3 * h + 1; } while (h >= 1) { for (int i = 0; i < N; i++) { for (int j = i; j >= h && less(a[j], a[j - h]); j -= h) { exch(a, j, j - h); } } h = h / 3; } } }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- java 中基本算法之希爾排序的實(shí)例詳解
- java數(shù)據(jù)結(jié)構(gòu)與算法之希爾排序詳解
- Java經(jīng)典排序算法之希爾排序詳解
- 使用Java實(shí)現(xiàn)希爾排序算法的簡(jiǎn)單示例
- 細(xì)致解讀希爾排序算法與相關(guān)的Java代碼實(shí)現(xiàn)
- Java實(shí)現(xiàn)八個(gè)常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等
- Java排序算法總結(jié)之希爾排序
- java實(shí)現(xiàn)希爾排序算法
- 淺析java 希爾排序(Shell)算法
- 圖解排序算法之希爾排序Java實(shí)現(xiàn)
相關(guān)文章
Java創(chuàng)建數(shù)組的幾種方式總結(jié)
下面小編就為大家?guī)?lái)一篇Java創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10Java CRM系統(tǒng)用戶登錄功能實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Java CRM系統(tǒng)用戶登錄功能實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java服務(wù)調(diào)用RestTemplate與HttpClient的使用詳解
無(wú)論是微服務(wù)還是SOA,都面臨著服務(wù)間的遠(yuǎn)程調(diào)用,這篇文章主要介紹了服務(wù)調(diào)用RestTemplate與HttpClient的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06java 字符串詞頻統(tǒng)計(jì)實(shí)例代碼
java 字符串詞頻統(tǒng)計(jì)實(shí)例代碼,需要的朋友可以參考一下2013-03-03