B. Network Configuration
用到了快排,自己编的快排算法,备用模板直接引用#include<stdio.h>
#include<math.h>
void swap(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}
void quickSort(int a[],int left,int right){
int i=left,j=right;
int pivot=a[left]; //设最左的待排数组为基数
for(;;){
while(i<j&&a[j]>=pivot) //j从右到左找比基数小的数
j--;
while(i<j&&a[i]<=pivot) //i从左到右找比基数大的数
i++;
if(i<j) //i<j,交换找出符合条件的两数
swap(&a[i],&a[j]);
else //否则第一次循环结束,i左侧的数比基数都小,i右侧的数比基数都大
break;
}
swap(&a[i],&a[left]);
if(left<right) //判断数组长度是否大于1,至少有两数才需继续递归
quickSort(a,left,i-1);
if(left<right)
quickSort(a,i+1,right);
}
int pc[105];
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&pc[i]);
quickSort(pc,0,n-1);
for(i=n-1;i>=0;i--)
if(n-i>=k) break;
printf("%d\n",pc[i]);
}
return 0;
}
#include<stdio.h>
#include<math.h>
void swap(int *x,int *y){
int temp=*x;
*x=*y;
*y=temp;
}
void quickSort(int a[],int left,int right){
int i=left,j=right;
int pivot=a[left]; //设最左的待排数组为基数
for(;;){
while(i<j&&a[j]>=pivot) //j从右到左找比基数小的数
j--;
while(i<j&&a[i]<=pivot) //i从左到右找比基数大的数
i++;
if(i<j) //i<j,交换找出符合条件的两数
swap(&a[i],&a[j]);
else //否则第一次循环结束,i左侧的数比基数都小,i右侧的数比基数都大
break;
}
swap(&a[i],&a[left]);
if(left<right) //判断数组长度是否大于1,至少有两数才需继续递归
quickSort(a,left,i-1);
if(left<right)
quickSort(a,i+1,right);
}
int pc[105];
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&pc[i]);
quickSort(pc,0,n-1);
for(i=n-1;i>=0;i--)
if(n-i>=k) break;
printf("%d\n",pc[i]);
}
return 0;
}