#include <stdio.h>
#include <stdlib.h>
#define maxsize 1000
void quicksort(int a[],int left,int right,int k)
{
if(left>=right)
return ;
int temp=a[left];
int i=left,j=right;
while(i<j)//i和j肯定有一个会指向空位置 当两个相遇说明基点就放在那个位置
{
while(i<j&&a[j]>=temp)//找到第一个小于temp的
{
j--;
}
a[i]=a[j];
while(i<j&&a[i]<=temp)
{
i++;
}
a[j]=a[i];
}
a[i]=temp;
if(i==k-1)//这是第k个元素
{
printf("%d",a[i]);
return ;//不在递归排序了
}
else
{
quicksort(a,left,i-1,k);
quicksort(a,i+1,right,k);
}
}
int main()
{
int n,k;
int a[maxsize];
scanf("%d%d",&n,&k);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
quicksort(a,0,n-1,k);
return 0;
}
快速排序 找出序列中第k个小的数
猜你喜欢
转载自blog.csdn.net/qq_40795475/article/details/89878780
今日推荐
周排行