shell排序是一種相對我之前寫的冒泡,選擇,插入排序更加高效的排序演算法;
它的基層排序思想還是用的插入排序的思想,但加入了縮小增量的思想;流程如下:
1、將n個元素的陣列分成n/2個序列,第1個資料與第n/2+1個資料為一對,第2個資料與第n/2+2個資料為一對....
2、一次迴圈使每乙個序列對排好序。
3、然後再分為n/4個序列,第乙個資料與第n/4+1個資料為一對...再次排序
4、不斷重複上述過程,當序列對變為1時,相當於執行一次插入排序,完成排序。
/* * 例如:一組10個資料:
* 第一次分5組:p[0]與p[5]比較,總共比較5次
* 第二次10/4=2組,p[0]與p[2]比較,總共比較8次
* 第三次10/8=1組,總共比較9次
*/下面給出兩種寫法如下:
//第一種寫法,可參照之前的插入排序理解
static int shellsort(int p)}}
return p;
}
JAVA實現Shell排序
shell排序可以理解為插入排序的變種,它充分利用了插入排序的兩個特點 1 當資料規模小的時候非常高效。2 當給定資料已經有序時的時間代價為o n 所以,shell排序每次把資料分成若干塊,來使用插入排序,而且之後在這若干個小塊排好序的情況下把它們合成大一點的小塊,繼續使用插入排序,不停的合併小塊,...
排序演算法之Shell排序(希爾排序)
shell排序 思想 先可進行分組,再利用插入排序。分組的方法是根據步長的設定從a 0 開始,並且不大於步長,組內相鄰兩個元素的邏輯距離是gap。分組結束的標誌是gap為0,也就是已經全部按照大小排列。推薦閱讀 給定陣列shell排序,從小到大排列。include int main gap 10 2...
java排序之氣泡排序
假設一籃球隊,成一佇列排列在籃球場上,每個人的身高都不相同,這樣的話就會成下面這種 現在呢,要對他們以身高進行排列讓他們成下面這種情況 採用氣泡排序的方式歷程如下 熊佇列的最左邊第一位 簡稱左一 起,讓他與最左邊第二位 左二 進行比較,如果左一的身高高於左二,那麼讓左一與左二調換位置 接下來對比左二...