代码拉取完成,页面将自动刷新
/*P186 (9)利用分治法求一组数据中最大的两个数和最小的两个数,具体算法可参照P150*/
#include<stdio.h>
int Swap(int x,int y){
int t;
t=x;
x=y;
y=t;
}
int select(int a[],int left,int right,int k){
int i,j,pivot;
if(left>=right){
return a[left];
}//
pivot=a[left];
i=left+1;
j=right;
while(1){
do{
i++;
}while(a[i]<pivot);
do{
j--;
}while(a[j]>pivot);
if(i>=j){
break;
}
Swap(a[i],a[j]);
}
if((j+1)==k){
return pivot;
}
a[left]=a[j];
a[j]=pivot;
if(j+1<k){
return select(a,j+1,right,k-j-1);
}
else{
return select(a,left,j-1,k);
}
}
int xzwt(int a[],int n,int k){
if(k<1||k>n){
return 0;
}
return select(a,0,n-1,k);
}
int main(){
int n,a[100],i,k,b[4],m;
printf("输入你数据数量:\n");
scanf("%d",&n);
printf("输入一串数字:\n");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("输入你要选择的第k大的4个数字:\n");
for(i=0;i<4;i++){
scanf("%d",&b[i]);
}
m=xzwt(a,n,b[2]);
printf("第%d大的数字为:%d\n",b[2],m);
m=xzwt(a,n,b[3]);
printf("第%d大的数字为:%d\n",b[3],m);
m=xzwt(a,n,b[0]);
printf("第%d大的数字为:%d\n",b[0],m);
m=xzwt(a,n,b[1]);
printf("第%d大的数字为:%d\n",b[1],m);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。