// RandomizedSelect.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000
int Partition( int a[], int p, int r )
{
int i = p-1;
while(p != r)
{
if(a[p]>a[r])
{
i++;
int temp = a[i];
a[i]= a[p];
a[p] = temp;
}
p++;
}
int temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return i+1;
}
int RandomizedPartition( int a[], int p, int r )
{
int i = rand()%(r-p) + p;
int temp = a[r];
a[r] = a[i];
a[i] = temp;
return Partition(a, p, r);
}
int RandomizedSelect(int a[], int p, int r, int i)
{
if (p == r)
{
return a[r];
}
int q = RandomizedPartition(a, p, r);
int k = q-p+1;
if (k==i)
{
return a[q];
}
else
{
if (i<k)
{
return RandomizedSelect(a,p,q,i);
}
else
{
return RandomizedSelect(a, q+1, r, i-k);
}
}
}
int main(int argc, char* argv[])
{
puts("please input the scale of data:");
int length = 0;
scanf("%d", &length);
int* a = (int *)malloc(length * sizeof(int));
srand(time(0));
int i=0;
puts("the array is:");
for(;i<length;i++)
{
a[i] = rand()%MAX;
printf("%d ", a[i]);
}
puts("\nplease input j:");
int j=0;
scanf("%d", &j);
j = RandomizedSelect(a, 0, length-1, j);
printf("%d", j);
return 0;
}
問題:
1、其實這個算法沒有什麼問題啦,比較簡單的,並且大師的書就是大師,很容易實現,基本上把代碼敲上就搞定!
2、有空自己得再好好看看,爭取一遍不看書,直接搞定。
3、有些小細節得注意,下標要特別注意~~~