基本思想:在快速排序的思想上,對基數的選擇採用了乙個隨機化的選擇。
1.對於遞迴到某一層的陣列中,在該陣列中隨機化選擇乙個數字,把陣列中的數字分為兩部分,比該數字小的資料都放在它的左邊,比該數字大的資料都放在它的右邊。
2.適用遞迴的思路對每次選出來的數字的左右兩邊進行排序。
**:
#include #includeusing namespace std;
int randominrange(int start, int end)
int partition(int data, int start, int end)
} ++small;
swap(data[small], data[end]);//將選出來的數字放在合適的位置
return small;
}void random_quicksort(int data, int start, int end)
int main();
random_quicksort(list,0, sizeof(list) / sizeof(int)-1);
for (int i = 0; i < sizeof(list) / sizeof(int); i++)
}
隨機化快速排序
define max size 100 include include using namespace std 交換指標p1,p2指向的值 void exchange int p1,int p2 pa為指向a的陣列,p,r為下標,對a p.r 進行就地重排,以a r 為主元 劃分為小於主元和大於主元...
演算法導論 隨機化的快速排序
public void random quicksort int array,int left,int right public int random position int array,int left,int right param array 待排序的陣列 param left 左邊界 pa...
經典演算法 快速排序的隨機化版本
一般的快速排序,在最壞的情況下時間複雜度為n2,這在輸入資料有序的情況下會出現,我們應該盡量去避免它。採取的策略是,在選擇分割點的時候,不再選擇第乙個點或者最後乙個點,而是隨機選擇乙個點,然後將它與第乙個點互換。include includeusing namespace std int parti...