Java 希爾排序

2021-08-29 23:17:57 字數 1253 閱讀 4588

希爾排序,也叫遞減增量排序,是插入排序的一種更高效的改進版本。

希爾排序是基於插入排序的。將插入排序演算法 內for迴圈中的所有 1 改為增量就可以。。。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

基本思想:先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2假設取增量為3,即把這組數下標為3*0、3*1,3*2,3*3的數進行插入排序、再把這組數下標+1再進行插入排序,直到所有數都進行排序。

即把下標為0、3、6、9的數進行插入排序:5  3  4  9插入排序結果為 3 4 5 9

把下標為1、4、7的數進行插入排序;6  7  2 插入排序結果為 2  6  7

把下標2、5、8的數進行插入排序 1  8  0 插入排序結果為0  1  8

這時把增量-1即增量為2,進行和上面一樣的操作

把下標為0、2、4、6、8的數進行插入排序:3  0  6  5  8 插入排序結果為:0  3  5  6  8

把下標為1、3、5、7、9的數進行插入排序:2  4  1  7  9 插入排序結果為:1  2  4  7  9

這時的序列已經接近公升序了

再將增量-1即增量為1,進行插入排序 ,

關於希爾排序增量的選擇有很多說法,理論上最後是1就可以,但是在時間上有所不同,關於希爾增量的選擇大家可以去查閱一些資料,也可以看一下這個reviewforjob——希爾排序(縮小增量排序)之塞奇威克增量序列

/**

* 希爾排序

*/class shell_sort

a[end + increment] = get;}}

system.out.println("希爾排序:");

for (int var : a)

}}class test;

for (int var : data)

system.out.println();

shell_sort.shellsort(data);

}}

Java 希爾排序

希爾排序示意圖 希爾排序,說實話有點難,不過還是弄出來了,package com.vgbh public class shellsorting 希爾排序 將無序陣列分割為若干個子串行,子串行不是逐段分割的,而是相隔特定的增量的子串行,對各個子串行進行插入排序 然後再選擇乙個更小的增量,再將陣列分割為...

希爾排序 Java

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

java 希爾排序

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