使用快速排序的种快排的思想找一组数据中的第k小的元素。
#include<iostream>
#define N 10
using namespace std;
int Partition(int a[],int l,int r){
int left=l,right=r;
int key=a[l]; //基准
while(left<right){
while(left<right&&a[right]>=key)
--right;
a[left]=a[right];//移动基准
while(left<right&&a[left]<=key)
++left;
a[right]=a[left];//移动基准
}
a[left]=key;//找到基准的位置
return left;//返回位置
}
int QuickSort(int a[],int l,int r,int k){
if(l<r){
int mid=Partition(a,l,r);//找基准位置
if(mid==k-1)
return a[mid];
if(mid>k-1)
QuickSort(a,l,mid-1,k); //对左半段排序
else
QuickSort(a,mid+1,r,k); //对右半段排序
}
}
printf(int a[],int l,int r){
for(int i=l;i<=r;i++){
cout<<a[i]<<"\t";
}
}
int main(){
int a[N]={0,9,9,7,6,5,3,2,1,1};
cout<<QuickSort(a,0,N-1,4)<<endl;//返回从1开始第4小的数
printf(a,0,N-1);//找数不同打印不同
return 0;
}