Java 希爾排序

2021-08-01 06:25:07 字數 3805 閱讀 3427

希爾排序示意圖:

希爾排序,說實話有點難,不過還是弄出來了,**:

package com.vgbh;

public

class shellsorting

/** 希爾排序:將無序陣列分割為若干個子串行,子串行不是逐段分割的,

* 而是相隔特定的增量的子串行,對各個子串行進行插入排序;

* 然後再選擇乙個更小的增量,再將陣列分割為多個子串行進行排序......最後選擇增量為1,

* 即使用直接插入排序,使最終陣列成為有序。

* * 增量的選擇:選用knuth間隔序列

*///希爾排序

public

void

shell (int arr,int n)

arr[inner] = temp;

"++++++arr[inner]:" + arr[inner]);

}h = (h-1) / 3;

n);}"end shell sorting:\n");

}public

void

data (int arr,int n) }}

1.上邊提到的knuth間隔序列,可以去google搜尋一下,那對於雜湊排序你會理解一半了。

2.中間有許多測試**,請自動忽略,下面是一段我自己測試的結果,相信會對你有幫助。

/*

此為資料為時的排序結果,可按照程式的執行結果理解程式的步驟。

希爾排序前:109

8765

4321

----

----

----

---start

shell

sorting:

當前的h值為:13109

8765

4321

----

----

----

---當前的h值為:4

第4次迴圈。--

----

--temp:6--

----

---inner:4

arr[

inner

]:10

inner:0++

++++

arr[

inner]:6

第5次迴圈。--

----

--temp:5--

----

---inner:5

arr[

inner]:9

inner:1++

++++

arr[

inner]:5

第6次迴圈。--

----

--temp:4--

----

---inner:6

arr[

inner]:8

inner:2++

++++

arr[

inner]:4

第7次迴圈。--

----

--temp:3--

----

---inner:7

arr[

inner]:7

inner:3++

++++

arr[

inner]:3

第8次迴圈。--

----

--temp:2--

----

---inner:8

arr[

inner

]:10

inner:4

arr[

inner]:6

inner:0++

++++

arr[

inner]:2

第9次迴圈。--

----

--temp:1--

----

---inner:9

arr[

inner]:9

inner:5

arr[

inner]:5

inner:1++

++++

arr[

inner]:1

2143

6587

109--

----

----

----

-當前的h值為:1

第1次迴圈。--

----

--temp:1--

----

---inner:1

arr[

inner]:2

inner:0++

++++

arr[

inner]:1

第2次迴圈。--

----

--temp:4--

----

---inner:2++

++++

arr[

inner]:4

第3次迴圈。--

----

--temp:3--

----

---inner:3

arr[

inner]:4

inner:2++

++++

arr[

inner]:3

第4次迴圈。--

----

--temp:6--

----

---inner:4++

++++

arr[

inner]:6

第5次迴圈。--

----

--temp:5--

----

---inner:5

arr[

inner]:6

inner:4++

++++

arr[

inner]:5

第6次迴圈。--

----

--temp:8--

----

---inner:6++

++++

arr[

inner]:8

第7次迴圈。--

----

--temp:7--

----

---inner:7

arr[

inner]:8

inner:6++

++++

arr[

inner]:7

第8次迴圈。--

----

--temp:10--

----

---inner:8++

++++

arr[

inner

]:10

第9次迴圈。--

----

--temp:9--

----

---inner:9

arr[

inner

]:10

inner:8++

++++

arr[

inner]:9

1234

5678

910--

----

----

----

-end

shell

sorting:

希爾排序後:12

3456

78910

----

----

----

---*/

3.對於希爾排序,我還是建議動手在紙上演算,其實會出現很多錯誤,但也會更深刻的理解希爾排序,動手豐衣足食。

有問題的可以聯絡我的郵箱。

希爾排序 Java

原理 對於n個待排序的數列,取乙個小於n的整數gap gap被稱為步長 將待排序元素分成若干個組子串行,所有距離為gap的倍數的記錄放在同乙個組中 然後,對各組內的元素進行直接插入排序。這一趟排序完成之後,每乙個組的元素都是有序的。然後減小gap的值,並重複執行上述的分組和排序。重複這樣的操作,當g...

java 希爾排序

希爾排序也成為 縮小增量排序 其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列 基本有序 後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能...

Java 希爾排序

希爾排序,也叫遞減增量排序,是插入排序的一種更高效的改進版本。希爾排序是基於插入排序的。將插入排序演算法 內for迴圈中的所有 1 改為增量就可以。希爾排序是基於插入排序的以下兩點性質而提出改進方法的 基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄...