演算法學習總結 五 快速排序

2022-10-10 20:18:11 字數 1187 閱讀 5668

一、演算法簡介

快速排序(quicksort)是對氣泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

二、演算法描述

快速排序使用分治法來把乙個串(list)分為兩個子串行(sub-lists)。

步驟為:

1、從數列中挑出乙個元素,稱為 "基準"(pivot),

2、重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

3、遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。

最差時間複雜度

o(n log n)

最優時間複雜度

o(n log n)

平均時間複雜度

o(n log n)

最差空間複雜度

需要額外輔助空間o(1)

三、演算法**

四、示例**

public

class

quicksort

private

int quick(int a, int low, int

high)

return

a; }

//首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料,

//然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面

private

int sort(int a, int low, int

high)

if (i

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

if (i

} a[i] =key;

}return

i; }

演算法學習(五) 基本排序演算法總結

前幾天學習幾個基本的排序演算法,下面來總結一下 在維基百科上有排序演算法的一張圖,紅線是我之前總結學習的。從我們學習的排序演算法中可以分為兩類 簡單排序有冒泡 選擇 插入排序 改進演算法有希爾 堆排序 歸併排序和快速排序。快速排序是冒泡的公升級版,屬於交換排序 希爾排序是直接插入排序的公升級,屬於插...

演算法學習 快速排序

快速排序 分治演算法 const int n 1e6 10 int a n a 待排序陣列,l 排序陣列的起始下標,r 排序陣列的結束下標 void quick sort int a,int l,int r 遞迴的終止條件 int x a l 選取排序的比較物件 int i l 1 設定排序的左指標...

演算法學習 快速排序

1 基本思想 取待排序陣列第乙個數作為參照數,建立left和right陣列,left儲存小於參照數的陣列集合,right儲存大於參照數的陣列集合,然後分別對left和right進行遞迴呼叫排序。2 舉例 11,2,3,43,23,5,6,9,10 取任意的乙個數為基準數 temp arr 0 遍歷陣...