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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java排序算法之——希尔排序

發布時間:2025/4/16 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java排序算法之——希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法簡述

希爾排序也叫作shell排序或縮小增量排序,據說是一個叫D.L.Shell的人發明出來的,顧取名shell排序。這種排序是基于插入排序思想的,也比較適用于數據量大時。


我剛開始看到時候對于插入排序也是半瓶子醋,直接導致我看不懂了,抓狂,so...我就去默默的補習一下插入排序嘍。

插入排序簡介

插入排序的核心思想是比較和插入,就是從第二個數開始,依次插入到前面合適的位置。排序步驟如下:

1. 首先對數組的前兩個數據進行從小到大的排序 2. 接著將第3個數據與排序好的兩個數據進行比較,插入合適的位置 3. 然后,將第4個數據插入已經排好的前3個數據中 4. 不斷重復上述的過程,完成排序

代碼實現

private void insertSort(int[] a){int i,j,t,h;for(i =1;i<a.length;i++){t = a[i];j = i-1;while(j>=0&&t<a[j]){a[j+1] = a[j];j--;}a[j+1] = t;System.out.println("第"+i+"步排序:"+Arrays.toString(a));}}

簡單的介紹了一下插入排序,下面就講一下這個希爾排序。

排序步驟

1.將有n個元素的數組分為n/2個數字序列,第1個數據和第n/2+1個數據為一對。。。 2.一次循環使每一個序列對排好順序(對每個序列使用插入排序算法,實質是一種分組插入) 3.然后,再變為n/4個序列,再次排序 4.不斷重復上述過程,隨著序列減少最后變為一個,也就完成了整個排序。

實例講解

比如對{12,31,11,20,17,30}進行希爾排序:

1. 第一次排序,首先將數組分為6/2=3個數字序列,第一個數據12和第四個數據20為一對,第二個數據和第五個數據為一對,第三個數據和第六個數據為一對,每一對進行排序后數據為:12,17,11,20,31,30 2. 第二次排序,將數組劃分為6/4=1(這里取整),此時逐個對數據比較,按照插入排序算法進行排序,排序后的數據為:11,12,17,20,30,31

代碼片段

private void shellSort(int[] a){int i,j,h;int r,temp;int x = 0;for(r = a.length/2;r>=1;r/=2){for(i = r;i<a.length;i++){temp = a[i];j = i -r;while(j>=0&&temp<a[j]){a[j+r] = a[j];j-=r;}a[j+r] = temp;}x++;System.out.println("第"+x+"步排序:"+Arrays.toString(a));}}

至此希爾排序就完成了,時間復雜度為O(nlog2n).

總結

以上是生活随笔為你收集整理的Java排序算法之——希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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