选择算法
一般选择问题看起来要比我么找最小值这样的简单问题更难。但这两个问题的渐进运行时间却是相同的Θ(n)。RANDOMIZED_SELECT算法,以快速排序算法为模型。与快速排序不同的是,快速排序会递归处理划分的两边,而RANDOMIZED_SELECT只处理划分的一边。快速排序运行的时间是Θ(n ㏒n),而RANDOMIZED_SELECT的期望运行时间是Θ(n).
#include<iostream>
#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;
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));
int i=rand()%(r-p)+p;
exchange(arry[i],arry[r]);
return PARTITION(arry,p,r);
}
int RANDOMIZED_SELECT(int *arry,i