快速排序總結

2021-08-23 14:37:31 字數 2347 閱讀 8132

快速排序,從字面意思就可以看出這是一種效率比較高的排序演算法,現在對該演算法做一下總結:

快速排序是由氣泡排序改進而得的,它的基本思想是:在待排序的n個記錄中任取乙個記錄(通常取第乙個記錄),把該記錄放入適當位置後,資料序列被此記錄劃分成兩部分。所有關鍵字比該記錄關鍵字小的記錄放置在前一部分,所有比它大的記錄放置在後一部分,並把該記錄排在這兩部分的中間(稱為該記錄歸位),這個過程稱作一趟快速排序。之後對所有的兩部分分別重複上述過程,直至每個部分內只有乙個記錄或為空為止。簡單的說,每趟使表的第乙個元素放入適當位置,將表一分為二,對子表按遞迴方法繼續這種劃分,直至劃分的子表長為1或0.

基本思路:

1、尋找pos位,然後將其分為兩段陣列,然後對這兩段陣列遞迴排序;

2、指定乙個基數key(三數取中法),定義兩個下標begin指向起始位置,end指向最後乙個元素的位置。begin尋找比基數(key)大的數字,找到 後將begin的資料賦給end,begin成為乙個坑,然後end尋找比基數(key)小的數字,找到將end的資料賦給begin,end成為乙個新坑,迴圈這個過程,直到begin指標與end指標相遇,然後將key的資料返回給那個坑,然後進行遞迴操作。

int pation1(int *array, int left, int right)

while (begin

< end&&array[begin] < key)

begin++;

if (begin

< end)

}array[begin] = key;

return begin;

}

基本思路:

定義兩個指標:ppre和pcur,ppre指標找比基準值大的數,pcur指標找比基準值小的數,ppre找到後,將ppre和pcur指標所指向的資料交換,當ppre指標遍歷完整個陣列時,將基數值與pcur指標的後乙個位置的資料進行交換,然後以pcur指標的後乙個位置作為分界,然後將陣列分開,進行遞迴排序。

**實現:

int pation2(int*array, int left, int right)

return prev;

}

基本思路:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

**實現:

int pation3(int *array, int left, int right)

}if (begin != right&&array[begin]>array[right])

return right;

}

//遞迴寫法

void quicksort(int *array, int left,int right)

}//非遞迴寫法

//快排的非遞迴寫法

void quicksort_o(int *array, int size)

}}void show(int*array,int size)

void sorttest()

; int sz = sizeof(arr) / sizeof(arr[0]);

quicksort(arr, 0, sz - 1);

show(arr, sz);

}int main()

在選擇基準值的時候,我們可能會因為選取的數太大或者太小,造成左右區間不均勻,這樣就會影響程式的效率和效能,這時候呢,我們可以採取三數取中法來決定基準值:

**實現:

int getkeyidx(int arr, int

left, int

right)

else

}

時間複雜度:

最優情況:o( nlogn)(即區間分配比較均勻)

最差情況:o( n^2 ) ( 最差的情況就是每一次取到的元素就是陣列中最小/最大的,這種情況其實就是氣泡排序了(每一次都排好乙個元素的順序))

平均時間複雜度:o( nlogn)

空間複雜度:

最優的情況下空間複雜度為:o(logn) ,每一次都平分陣列的情況

最差的情況下空間複雜度為:o( n ) ,退化為氣泡排序的情況

穩定性:

是不穩定排序

以上就是對快排的簡單總結啦,希望對你有幫助。

排序總結 快速排序

思想 從陣列中選取乙個數作為基準值,按照從大到小排序小於基準值的放在基準值的左邊,大於基準值的在基準值的右邊 核心partition過程 選取陣列第乙個元素作為基準值,小於區 left 1,j 1 大於等於區 j,i 1 讓變數i從left 1位置開始遍歷陣列,j變數位置是小於區間的而最後乙個數,若...

快速排序總結

package demo public class demo2 quicksort arr,0,arr.length 1 for int i 0 i arr.length i private static void quicksort int arr,int begin,int end int i,...

排序演算法總結(快速排序)

終於不用改 了,希望文章大修順利!穩定的演算法 不穩定的演算法 內部排序 排序過程不涉及內 外存交換 外部排序 排序過程有內 外存交換 in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基...