隨機快速排序C 實現

2021-08-11 08:41:16 字數 841 閱讀 6943

傳統的隨機快速排序,是選定乙個數,然後以這個數為標桿,分為小於等於(標桿)區和大於(標桿)區。

改進的快速排序,分為,小於區,等於區和大於區。這個劃分的過程用partition函式實現。

具體請看**。

#ifndef quicksort_h

#define quicksort_h

#include#include#includeusing namespace std;

void swap(vector&arr, int i, int j)

vectorpartition(vector&arr, int l, int r)

else if (arr[l] > arr[r])//當前數大於劃分值

swap(arr, l, --more);//交換當前數和大於區邊界

else

++l;//當前數與劃分值相等,啥也不幹,往下看下乙個數。

} swap(arr, more, r);//當l與more遇上了,則把劃分值和大於區的邊界交換回來

vectorp;//返回等於區的邊界

return p;

}void quicksort(vector&arr, int l, int r) }

void quicksort(vector&a)

#endif

int main()

; quicksort(a);

for (auto c : a)

cout << c << " ";

system("pause");

return 0;

}

Python 實現快速排序和隨機快速排序

直接上 快速排序 coding utf 8 defquicksort a,left,right if leftmid partition a,left,right quicksort a,left,mid 1 quicksort a,mid 1,right defpartition a,left,r...

C 快速排序 隨機快速排序 學習記錄

都是網上的資源,侵刪。快速排序演算法以及其他演算法的時間以及空間複雜度 我認為比較好理解的思路 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。坑填數1 i l j r 將基準數挖出...

隨機快速排序

問題畫出來小於區域和等於區域,劃偏 1,2,3,4,5,6,7 7 7 總拿最後乙個劃分,跟資料狀況有關,比較差的蛻變程o n 2 6,5,4,3,2,1 1,1 資料分布比較差 比價好的情況 x t n 2t n 2 o n n nlogn 隨機快速排序 隨機選擇乙個數和最後乙個替換一下 長期期望...