快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐博娱188_机器人论坛



算法:

求一列数中的第k小元和记娱乐博娱188素,使用分治的策略进行递归求解。

首先随便指定一个数,这里我指定的是第一个数为第k小元素记为randK,将数组中其他的数与findK进行对照,比他小的放在左边,大年夜的放在右边,假如randK左边的元素个数为k-1个,阐明findK便是你所要找的元素,假如左边的元素个数>k-1,阐明你要找的元素在左边的数中,继承应用相同的措施在左边的数中进行和记娱乐博娱188查找,假如左边的元素的个数阐明你要找的元素在右边的数中,则继承应用相同的法子在右边的数中进行查找。。。

代码:

#include

#include

#include

#define Array_max 200

void swap(int &a,int &b){

int temp;

temp = a;

a = b;

b = temp;

}

void out(int a[],int n){

for(int i = 0;i

cout

if(i % 8 == 0 && i != 0)

cout

}

cout

}

int findP(int a[],int oP,int R){//oP是随机元素的位置开始为0,oP左边,R右边

int randK = a[oP];//随机找一个数

int iL = oP +和记娱乐博娱188 1;

int iR = R;

while(true){

while(a[iL]

while(a[iR]>=randK){iR--;}

if(iL>=iR) break;

swap(a[iL],a[iR]);

}

swap(a[oP],a[iR]);

return iR;

}

int findK(int a[],int oP,int n,int k){//n为要排序的元素的个数

int find_k;

int copy_k;

find_k = findP(a,oP,n);//指向获取元素的最小值,oP指向获取元素的最大年夜值

copy_k = find_k - oP;

if(k == copy_k)

return a[find_k];

if(k > copy_k)

return findK(a,find_k + 1,n,k - copy_k-1);

if(k

return findK(a,oP,find_k - 1,k);

else return 0;

}

void m和记娱乐博娱188ain和记娱乐博娱188(){

int n;

int k;

Begin:

cout

cin>>n;

cout

int *a = new int[n];

srand((unsigned)time(NULL)); //天生随机数

for(int i = 0; i

a[i] = rand()%100;

}

cout

out(a,n);

cout

cin>>k;

if(k>n) goto Begin;//输入差错,从新输入

else

cout

}

您可能还会对下面的文章感兴趣: