您的位置:首页 > 其它

快速排序随机化版本

2014-10-29 21:04 495 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: