您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java希爾排序怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java希爾排序怎么實現”吧!
希爾排序(shell sort)是插入排序的一種,它是簡單插入排序經過改進之后的一個更高效的算法,這個排序方法又稱為縮小增量排序。
希爾排序思想介紹
簡單來說,希爾排序是將較大的數據集合邏輯上分割成若干個小的集合,然后對每個分組分別進行插入排序。
例如,假設待排序元素序列有n個元素,首先取一個整數increment(小于n)作為間隔將全部元素分為increment個子序列,在每一個子序列中分別實行直接插入排序。然后縮小間隔increment,重復上述子序列劃分和排序工作。直到最后取increment=1,將所有元素放在同一個子序列中排序為止。
算法說明:
待排序數據:12,1,6,7,4,10,5,9
第一次的增量為數組元素的長度/2,即increment=4,得到四個分組:
分組一:12, 4
分組二: 1, 10
分組三: 6, 5
分組四: 7, 9
對這四個分組分別進行插入排序,最終得到:
4,1,5,7,12,10,6,9
第二次比較,increment取上次值的一半,即increment=2,得到兩個分組:
分組一:4, 5, 12, 6
分組二: 1, 7, 10, 9
對這兩個分組分別進行插入排序,最終得到:
4, 1, 5,7, 6,9,12,10
第三次比較,increment=1,即只有一個分組:
分組一:4,1,5,7,6,9,12,10
對其進行插入排序,最終得到:
1,4,5,6,7,9,10,12
希爾排序的代碼實現
1. public static void shellSort(int[] arr){
2. int temp = 0;
3. int j = 0;
4. //增量初始值是長度的一半,增量每次變為原來的一半
5. for(int inc = arr.length/2 ; inc >= 1 ; inc /= 2){
6. for(int i = inc ; i < arr.length; i++){
7. temp = arr;
8. //將當前數與減去增量之后位置的數進行比較,如果大于,則后移
9. for(j = i - inc; j >=0; j -= inc){
10. if(arr[j] > temp){
11. arr[j + inc] = arr[j];
12. }else{
13. break;
14. }
15. }
16. arr[j + inc]=temp;
17. }
18. }
19. }
感謝各位的閱讀,以上就是“Java希爾排序怎么實現”的內容了,經過本文的學習后,相信大家對Java希爾排序怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。