演算法排序2 基本排序方法1

2022-09-03 14:00:22 字數 2497 閱讀 4645

下一章下面的**基本都是使用comparable 介面,使用這個介面實現了主鍵的抽象,它給出了實現這個介面資料型別的物件的大小順序的定義。

但是,不是每次都要使用這個介面,因為陣列元素的主鍵很可能只是每個元素的一小部分

概念:首先找到陣列中最小的元素,其次,將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小元素那麼它就和自己交換)。其次,在剩下的元素中找到最小的元素,將它和陣列的第二個元素交換位置。如此往復,知道將整個陣列排序。

在這個演算法中,最重要的就是交換和比較,,所有演算法的時間效率取決於比較的次數

對於選擇排序,鮮明的特點就是 執行時間和輸入無關。

public

static

void

sort

(comparable[

] a)

exch

(a,i,min);}

}

插入排序就是你將每一張牌插入到已經有序的牌中的適當位置

但是在將其餘所有元素在插入之前都向右移動一位

與上面的選擇排序 不同的是, 插入排序所需的時間取決於輸入元素中元素的初始順序

所以通過上述的得到:插入排序對應非隨機數組的排序,效率會更好

public

static

void

sort

(comparable[

] a)

}}

要大幅度提高插入排序的速度 的方法: 只需要在內迴圈中將較大的元素都向右移動而不總是交換兩個元素(這樣訪問陣列的次數就能減少一半)

public

static

void

sort2

(comparable[

] a)

a[j]

= temp;

}}

希爾排序是==基於插入排序==的快速的排序演算法

希爾排序為了加快速度簡單的地改進了插入排序,交換不相鄰的元素以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序

相當於分組排序

public

static

void

sort

(comparable[

] a)

while

(h >=3)

h = h/3;}}}

歸併排序 : 可以先將它分成兩半分別排序,然後再將結果歸併起來,

當然最吸引人的地方是 : 它能夠保證將任意長度為n的陣列排序所需時間和

成正比,

主要缺點是: 它所需的額外空間和n成正比

歸併排序分為自頂向下和自底向上的兩種方法,

在歸併排序中利用了高效演算法中的分治思想,,,這是其中最典型的例子

//自頂向下

class

merge

private

static

void

sort

(comparable[

] a,

int lo,

int hi)

int mid = lo +

(hi - lo)/2

;sort

(a, lo, mid)

;sort

(a, mid +

1, hi)

;merge1

(a, lo, mid, hi);}

public

static

void

merge1

(comparable[

] a,

int lo,

int mid,

int hi)

for(

int k = lo; k <= hi; k++

)else

if(j > hi)

elseif(

less

(aux[j]

, aux[i]))}}}

//自底向上

class

mergebu}}

public

static

void

merge2

(comparable[

] a,

int lo,

int mid,

int hi)

for(

int k = lo; k <= hi; k++

)else

if(j > hi)

elseif(

less

(aux[j]

, aux[i]))}}}

上面這個兩個方法,,的臨界值是 當陣列長度為2的冪時,兩種歸併所用的比較次數和陣列訪問次數正好相同,只是順序不同,

而且自底向上的排序比較適合鍊錶組織的資料

基本排序演算法(2)

起泡排序 bubble sort 起泡排序是交換排序中最簡單的排序方法,其基本思想是 兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序的記錄為止。將整個待排序記錄分為無序區和有序區,初始時有序區為空。對無序區從前到後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關...

基本排序排序演算法

時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...

基本排序排序演算法

時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...