希爾排序演算法

2021-10-17 09:03:03 字數 3503 閱讀 1710

介紹

希爾排序也是一種插入排序,它是簡單插入排序經過改進後的乙個高效的版本,也稱縮小增量排序

基本思想

希爾排序法基本思想

是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;

整個檔案被分為一組,演算法變終止

**(交換式和移位式)

public

class

shellsort

;//shellsort(arr);//交換式

shellsort2

(arr)

;//移位式

}//交換式希爾排序

public

static

void

shellsort

(int

arr)}}

count++

; system.out.

println

("希爾排序第"

+ count +

"輪="

+ arrays.

tostring

(arr));

}}//對交換式的希爾排序進行優化-》移位法

public

static

void

shellsort2

(int

arr)

//當退出white迴圈後,就給temp找到插入的位置

arr[j]

=temp;}}

count++

; system.out.

println

("希爾排序第"

+ count +

"輪="

+ arrays.

tostring

(arr));}}}

結果

希爾排序第1輪=[3, 5, 1, 6, 0, 8, 9, 4, 7, 2]

希爾排序第2輪=[0, 2, 1, 4, 3, 5, 7, 6, 9, 8]

希爾排序第3輪=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

速度測試

交換式

public

static

void

main

(string[

] args)

;//建立要給80000個隨機的陣列

int[

] arr =

newint

[80000];

for(

int i =

0;i<

80000

;i++

) system.out.

println

("排序前");

date date1 =

newdate()

; ******dateformat ******dateformat =

new******dateformat

("yyyy-mm-dd hh:mm:ss");

string date1str = ******dateformat.

format

(date1)

; system.out.

println

("排序前的時間="

+date1str)

;shellsort

(arr)

;//交換式

//shellsort2(arr);//移位式

system.out.

println

("排序後");

date date2 =

newdate()

; string date2str = ******dateformat.

format

(date2)

; system.out.

println

("排序前的時間="

+date2str)

;// system.out.println(arrays.tostring(array));

}

結果

排序前

排序前的時間=2021-01-24 00:32:26

排序後排序前的時間=2021-01-24 00:32:32

移位式

public

static

void

main

(string[

] args)

;//建立要給80000個隨機的陣列

int[

] arr =

newint

[80000];

for(

int i =

0;i<

80000

;i++

) system.out.

println

("排序前");

date date1 =

newdate()

; ******dateformat ******dateformat =

new******dateformat

("yyyy-mm-dd hh:mm:ss");

string date1str = ******dateformat.

format

(date1)

; system.out.

println

("排序前的時間="

+date1str)

;// shellsort(arr);//交換式

shellsort2

(arr)

;//移位式

system.out.

println

("排序後");

date date2 =

newdate()

; string date2str = ******dateformat.

format

(date2)

; system.out.

println

("排序前的時間="

+date2str)

;// system.out.println(arrays.tostring(array));

}

結果

排序前

排序前的時間=2021-01-24 00:34:57

排序後排序前的時間=2021-01-24 00:34:57

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...

排序演算法 希爾排序

摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...

排序演算法 希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...