每隔一定間隔組成乙個序列,對這個序列進行排序。逐漸縮短間隔,最後一次間隔必定是1。間隔的變化可以自行確定,書中介紹了h = 3*h + 1的變化策略。
public
class
main
;shellsort
(a);
print
(a);
}public
static
void
shellsort
(int
a)while
(h >=1)
a[inner]
= tmp;
} h =
(h-1)/
3;}}
public
static
void
print
(int
a)system.out.
println();}}
快速排序很重要的一點就是劃分,所以先說劃分。
劃分劃分就是需要選定乙個樞紐(pivot),把小於樞紐的數挪到樞紐左邊,把大於樞紐的數挪到樞紐右邊。
public
class
main
;public
static
void
main
(string[
] args)
//快速排序(遞迴、分治),區間[left, right]
public
static
void
recursionquicksort
(int left,
int right)
else
}//劃分,返回劃分的分界元素下標
public
static
intpartition
(int left,
int right,
int pivot)
//從左便開始找,找乙個大於樞紐的數
while
(rightptr >
0&& a[
--rightptr]
> pivot)
//從右邊開始找,找乙個小於樞紐的數
if(leftptr >= rightptr)
else
}swap
(leftptr, right)
;return leftptr;
//返回的是分界處元素下標,該分界屬於右邊部分
資料結構和演算法 排序演算法 希爾排序
希爾排序 希爾排序 希爾排序就是插入排序的一種改進版本,演算法的步驟 把乙個序列不視為乙個整體,而是視為多個子串行,假設間隔是gap 4 alist 54,26,93,17,77,31,44,55,20 54,26,93,17,77,31,44,55,20 54 77 20 這是1 組,間隔是4,2...
資料結構 演算法 希爾排序
希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...
Java資料結構與演算法 六 希爾排序
插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率。但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。system.out.println 排序之前 for int i 0 iout.print a i 希爾排序 int d a.length while true...