#include<iostream>
#include<vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
int partition (int A[],int p,int r){
int x=A[r];
int i=p-1;
for(int j=p;j<r;j++){
if(A[j]<=x){
i++;
swap(A[i],A[j]);
}
}
swap(A[i+1],A[r]);
return i+1;
}
int randomized_partition(int A[],int p,int r){
srand((unsigned)time(NULL));
int i=(rand() % (r-p+1))+ p;
swap(A[r],A[i]);
return partition(A,p,r);
}
int randomize_select(int A[],int p,int r,int i){
if(p==r) return A[p];
int q=randomized_partition(A,p,r);
int k=q-p+1;
if(i==k) return A[q];
else if(i<k)
return randomize_select(A,p,q-1,i);
else return randomize_select(A,q+1,r,i-k);
}
int main(){
int a;
int A[]={4,3,2,5,6,7,10,8,9,1};
cout<<randomize_select(A,0,9,6)<<endl;
cin>>a;
}
C++随机选择算法
最新推荐文章于 2023-08-31 11:40:12 发布