(Java資料結構和演算法)希爾排序 快速排序

2021-09-01 12:59:26 字數 1600 閱讀 8856

每隔一定間隔組成乙個序列,對這個序列進行排序。逐漸縮短間隔,最後一次間隔必定是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...