问题描述:n个数中找出第k小的元素
输入:
9
5 3 8 1 4 6 9 2 7
4
输出:
4
用快排思想先找出数组中第一个元素的位置(博客中有快排算法):
排序前:5 3 8 1 4 6 9 2 7
排序后:2 3 4 1 5 6 9 8 7 (5的位置确定了)
用k与元素5的下标计较,等于就输出,小于递归5前的元素,大于递归5后的元素
代码:
#include
using namespace std;
void QuickSort(int *a,int left,int right,int k)
{
int i=left;
int j=right;
while(i
{
int temp;
//从后往前比较
while(i
j--;
if(i
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
}
//从前往后比较
while(i
i++;
if(i
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
j--;
}
}
if(k==i)
{
cout<
return;
}
else if(k
{
QuickSort(a,left,i-1,k);
}
else
{
QuickSort(a,j+1,right,k);
}
}
int main()
{
int n;
int k;
int a[100];
cin>>n;
int left=1,right=n;//对应下标位置
for(int i=1; i<=n; i++)
{
cin>>a[i];
}
cin>>k;
QuickSort(a,left,right,k);
return 0;
}
标签:right,治法,int,元素,QuickSort,快排,查找,left
来源: https://www.cnblogs.com/xxaf/p/12958237.html