基本排序演算法(2)

2022-08-28 08:36:10 字數 1266 閱讀 6278

起泡排序(bubble sort)

起泡排序是交換排序中最簡單的排序方法,其基本思想是:兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序的記錄為止。

將整個待排序記錄分為無序區和有序區,初始時有序區為空。

對無序區從前到後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的記錄向後移。

重複執行2,直到無序區中沒有記錄。

在編寫實現演算法時,有些小技巧可以利用。我們可以設定乙個變數bound用來記錄無序區和有序區的分界,用另乙個變數exchange記錄每次記錄交換的位置。在一趟排序後,exchange記錄了最後一次變換的位置,此時exchange即無序區與有序區的分界,傳遞給bound。如果exchange等於第乙個記錄的序號(即沒有發生交換),則結束排序。

**示例

1

int bubblesort(int a, int arraystart, int

arrayend)218

}19}20

return1;

21 }

view code

快速排序(quick sort)

快速排序(又稱分割槽交換排序)是對起泡排序的一種改進,改進的著眼點是:在起泡排序中,記錄的比較和移動是在相鄰位置進行的,記錄每次交換只能後移乙個位置,因而總的比較次數和移動次數較多。在快速排序中,記錄的比較和移動是從兩端向中間進行的,關鍵碼較大的記錄一次就能從前面移動到後面,關鍵碼較小的記錄一次就能從後面移動到前面,記錄移動的距離較遠,從而減少了總的比較次數和移動次數。

基本思想:選取乙個軸值,將待排序記錄劃分成獨立的兩部分,左側記錄的關鍵碼均小於或等於軸值,右側記錄的關鍵碼均大於或等於軸值,然後分別對這兩部分重複上述過程,直到整個序列有序。

**示例

1

int quicksort(int a, int arraystart, int

arrayend)211

return1;

12}1314

int quicksortpartition(int a, int arraystart, int

arrayend)

1523

if(i

2430

while(i < j && a[i] <=a[j])

3134

if(i

3541}42

return

i;43 }

view code

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

下一章下面的 基本都是使用comparable 介面,使用這個介面實現了主鍵的抽象,它給出了實現這個介面資料型別的物件的大小順序的定義。但是,不是每次都要使用這個介面,因為陣列元素的主鍵很可能只是每個元素的一小部分 概念 首先找到陣列中最小的元素,其次,將它和陣列的第乙個元素交換位置 如果第乙個元素...

基本排序排序演算法

時空複雜度 氣泡排序 時間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 ...