QuickSort 快速排序

2021-08-01 07:56:12 字數 901 閱讀 2860

快速排序是分割槽交換,屬於交換排序,是氣泡排序的改進。

當待排序的關鍵字是隨機分布時,快速排序的平均時間最短。

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。步驟為:

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

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

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

遞迴到最底部時,數列的大小是零或一,也就是已經排序好了。這個演算法一定會結束,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。

//平均時間複雜度o(n^2)

//空間複雜度o(logn)~o(n)

//最優時間複雜度o(nlogn)

//最壞時間複雜度o(n^2)

//不穩定

#include

void swap(int *a, int *b)

int partition(int a, int low, int high)

a[low] = a[high];

while (low < high && a[low] <= pivotkey)

a[high] = a[low];

}a[low] = pivotkey;

return low;

}void quicksort(int a, int low, int high)

else

}int main()

return

0;}

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...