演算法思想:
將乙個長度為n(n>0)的陣列進行從小到大的順序排列。快速排序首先需要在該陣列中找任意乙個元素出來作為比較基準(pivot),這裡假設找的pivot為當前陣列的最後乙個元素,即 arr[n-1],那麼接下來在arr[0] - arr[n -2]這個陣列中,我要將它們分為2大類(即2個子陣列),第乙個陣列要確保所有元素比pivot要小或者等於pivot,第二個陣列中的所有元素要確保比pivot大,做好這樣一件事情之後,再將pivot元素插入到 子陣列1和子陣列2的中間,這樣一輪就保證了 pivot所在的位置一定是最終排序後的位置,因為它左邊的所有元素都已經比它小或等於它了,它右邊的所有元素都已經比它大了。再利用分治的思想,對於左邊的子陣列和右邊的子陣列再將這樣的方法進行下去直到當前arr的len = 1或者 0,這就是快速排序的思想。
快速排序的最理想時間複雜度為o(nlgn),平均時間複雜度也是o(nlgn);最壞時間複雜度是o(n^2),這裡最壞的情況就是選擇的pivot那個元素在該陣列的最左邊或最右邊。快速排序是乙個不穩定的排序演算法。
**:
#include #include using namespace std;
void swap(int arr, int i, int j)
void quicksort(int arr,int len)
while (arr[right] > arr[pivot])
if (left <= right)
else
} }int main();
int len = sizeof(arr) / sizeof(arr[0]);
quicksort(arr, len);
for (int i = 0; i < len; ++i)
system("pause");
return 0;
}
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...
快速排序 c 實現
快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...
快速排序(C 實現)
include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...