起泡排序(bubble sort)
起泡排序是交換排序中最簡單的排序方法,其基本思想是:兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序的記錄為止。
將整個待排序記錄分為無序區和有序區,初始時有序區為空。
對無序區從前到後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的記錄向後移。
重複執行2,直到無序區中沒有記錄。
在編寫實現演算法時,有些小技巧可以利用。我們可以設定乙個變數bound用來記錄無序區和有序區的分界,用另乙個變數exchange記錄每次記錄交換的位置。在一趟排序後,exchange記錄了最後一次變換的位置,此時exchange即無序區與有序區的分界,傳遞給bound。如果exchange等於第乙個記錄的序號(即沒有發生交換),則結束排序。
**示例
1view codeint bubblesort(int a, int arraystart, int
arrayend)218
}19}20
return1;
21 }
快速排序(quick sort)
快速排序(又稱分割槽交換排序)是對起泡排序的一種改進,改進的著眼點是:在起泡排序中,記錄的比較和移動是在相鄰位置進行的,記錄每次交換只能後移乙個位置,因而總的比較次數和移動次數較多。在快速排序中,記錄的比較和移動是從兩端向中間進行的,關鍵碼較大的記錄一次就能從前面移動到後面,關鍵碼較小的記錄一次就能從後面移動到前面,記錄移動的距離較遠,從而減少了總的比較次數和移動次數。
基本思想:選取乙個軸值,將待排序記錄劃分成獨立的兩部分,左側記錄的關鍵碼均小於或等於軸值,右側記錄的關鍵碼均大於或等於軸值,然後分別對這兩部分重複上述過程,直到整個序列有序。
**示例
1view codeint 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 }
演算法排序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 ...