国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 圖解排序算法之希爾排序Java實現(xiàn)

圖解排序算法之希爾排序Java實現(xiàn)

2021-09-16 10:52dreamcatcher-cx Java教程

希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進(jìn)之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式

一、基本思想

希爾排序是把記錄按下標(biāo)的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關(guān)鍵詞越來越多,當(dāng)增量減至1時,整個文件恰被分成一組,算法便終止。

簡單插入排序很循規(guī)蹈矩,不管數(shù)組分布是怎么樣的,依然一步一步的對元素進(jìn)行比較,移動,插入,比如[5,4,3,2,1,0]這種倒序序列,數(shù)組末端的0要回到首位置很是費勁,比較和移動元素均需n-1次。而希爾排序在數(shù)組中采用跳躍式分組的策略,通過某個增量將數(shù)組元素劃分為若干組,然后分組進(jìn)行插入排序,隨后逐步縮小增量,繼續(xù)按組進(jìn)行插入排序操作,直至增量為1。希爾排序通過這種策略使得整個數(shù)組在初始階段達(dá)到從宏觀上看基本有序,小的基本在前,大的基本在后。然后縮小增量,到增量為1時,其實多數(shù)情況下只需微調(diào)即可,不會涉及過多的數(shù)據(jù)移動。

我們來看下希爾排序的基本步驟,在此我們選擇增量gap=length/2,縮小增量繼續(xù)以gap = gap/2的方式,這種增量選擇我們可以用一個序列來表示,{n/2,(n/2)/2...1},稱為增量序列。希爾排序的增量序列的選擇與證明是個數(shù)學(xué)難題,我們選擇的這個增量序列是比較常用的,也是希爾建議的增量,稱為希爾增量,但其實這個增量序列不是最優(yōu)的。此處我們做示例使用希爾增量。

圖解排序算法之希爾排序Java實現(xiàn)

二、代碼實現(xiàn)

在希爾排序的理解時,我們傾向于對于每一個分組,逐組進(jìn)行處理,但在代碼實現(xiàn)中,我們可以不用這么按部就班地處理完一組再調(diào)轉(zhuǎn)回來處理下一組(這樣還得加個for循環(huán)去處理分組)比如[5,4,3,2,1,0] ,首次增量設(shè)gap=length/2=3,則為3組[5,2] [4,1] [3,0],實現(xiàn)時不用循環(huán)按組處理,我們可以從第gap個元素開始,逐個跨組處理。同時,在插入數(shù)據(jù)時,可以采用元素交換法尋找最終位置,也可以采用數(shù)組元素移動法尋覓。希爾排序的代碼比較簡單,如下:

  1. package sortdemo;
  2.  
  3. import java.util.Arrays;
  4.  
  5. public class ShellSort {
  6. public static void main(String []args){
  7. int []arr ={1,4,2,7,9,8,3,6};
  8. sort(arr);
  9. System.out.println(Arrays.toString(arr));
  10. int []arr1 ={1,4,2,7,9,8,3,6};
  11. sort1(arr1);
  12. System.out.println(Arrays.toString(arr1));
  13. }
  14.  
  15. /**
  16. * 希爾排序 針對有序序列在插入時采用交換法
  17. * @param arr
  18. */
  19. public static void sort(int []arr){
  20. //增量gap,并逐步縮小增量
  21. for(int gap=arr.length/2;gap>0;gap/=2){
  22. //從第gap個元素,逐個對其所在組進(jìn)行直接插入排序操作
  23. for(int i=gap;i<arr.length;i++){
  24. int j = i;
  25. while(j-gap>=0 && arr[j]<arr[j-gap]){
  26. //插入排序采用交換法
  27. swap(arr,j,j-gap);
  28. j-=gap;
  29. }
  30. }
  31. }
  32. }
  33.  
  34. /**
  35. * 希爾排序 針對有序序列在插入時采用移動法。
  36. * @param arr
  37. */
  38. public static void sort1(int []arr){
  39. //增量gap,并逐步縮小增量
  40. for(int gap=arr.length/2;gap>0;gap/=2){
  41. //從第gap個元素,逐個對其所在組進(jìn)行直接插入排序操作
  42. for(int i=gap;i<arr.length;i++){
  43. int j = i;
  44. int temp = arr[j];
  45. if(arr[j]<arr[j-gap]){
  46. while(j-gap>=0 && temp<arr[j-gap]){
  47. //移動法
  48. arr[j] = arr[j-gap];
  49. j-=gap;
  50. }
  51. arr[j] = temp;
  52. }
  53. }
  54. }
  55. }
  56. /**
  57. * 交換數(shù)組元素
  58. * @param arr
  59. * @param a
  60. * @param b
  61. */
  62. public static void swap(int []arr,int a,int b){
  63. arr[a] = arr[a]+arr[b];
  64. arr[b] = arr[a]-arr[b];
  65. arr[a] = arr[a]-arr[b];
  66. }
  67. }

三、總結(jié)

本文介紹了希爾排序的基本思想及其代碼實現(xiàn),希爾排序中對于增量序列的選擇十分重要,直接影響到希爾排序的性能。我們上面選擇的增量序列{n/2,(n/2)/2...1}(希爾增量),其最壞時間復(fù)雜度依然為O(n2),一些經(jīng)過優(yōu)化的增量序列如Hibbard經(jīng)過復(fù)雜證明可使得最壞時間復(fù)雜度為O(n3/2)。希爾排序的介紹到此為止。

以上就是圖解排序算法之希爾排序Java實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于希爾排序 Java的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://www.cnblogs.com/chengxiao/p/6104371.html

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人a视频 | 日韩欧美一区二区三区免费观看 | 国产精品视频免费观看 | 综合在线视频 | 三区视频| 高清视频一区 | 午夜国产视频 | 国产精品18久久久 | 黑人中文字幕一区二区三区 | 久久成人国产精品 | 天堂资源最新在线 | 色欧美片视频在线观看 | 国产精品99 | 久久99国产精品 | 久久国产亚洲 | 久久中文字幕精品 | 欧美一级内谢 | 久久久久国产一区二区三区四区 | 国产99在线 | 亚洲 | 成人在线免费网站 | 国产噜噜噜噜噜久久久久久久久 | 我我色综合| 国内精品久久久久久影视8 有码在线 | 精品无码久久久久国产 | 中文字幕免费 | 羞羞小视频 | 激情欧美一区二区三区中文字幕 | www.久久 | 成人免费在线电影 | 精品免费国产一区二区三区四区 | 成年人xxxx| 欧美自拍一区 | 日韩欧美一区二区三区免费观看 | 羞羞视频免费 | 色片视频免费 | 亚洲美女久久 | 久久久久久一级片 | 人人九九| 懂色av中文一区二区三区天美 | 欧美全黄 | 成人h动漫精品一区二区樱花 |