快速排序随机化版本

来源:互联网 发布:sql do while的用法 编辑:程序博客网 时间:2024/04/30 17:15
#include<iostream>#include<algorithm>#include<time.h>#include<stdlib.h>using namespace std;void exchange(int &a,int &b){int temp=a;a=b;b=temp;}int PARTITION(int *arry,int p,int r){int x=arry[r];  //主元,划分子数组 int i=p-1;//记录 p<=k<<i 则A[k]<=x;for(int j=p;j<r;j++){if(arry[j]<x){i++;exchange(arry[i],arry[j]);}} exchange(arry[i+1],arry[r]);return i+1;}int RANDOM_PARTITION(int *arry,int p,int r){time_t t;  srand((unsigned) time(&t));//srand((int)time(0));int i=rand()%(r-p)+p;//int i=((int) (r*rand()))/ (RAND_MAX+1.0) +p;cout<<"i:"<<i<<endl;exchange(arry[i],arry[r]);return PARTITION(arry,p,r);}void QUICKSORT(int *arry,int p,int r){if(p<r){int q=RANDOM_PARTITION(arry,p,r);QUICKSORT(arry,p,q-1);QUICKSORT(arry,q+1,r);}} void show(int *arry,int i){for(int j=0;j<=i;j++)cout<<arry[j]<<"  ";cout<<endl;}int main(){int arry[12]={0,10,31,4,5,9,6,1,2,3,8,-9};QUICKSORT(arry,0,11);show(arry,11);return 0;}

0 0
原创粉丝点击