能帮到你的话,就给个赞吧 ?
#include <iostream>
#include <cstdio>
using namespace std;
//这里用n/2大的举例
/*
对数组进行选择排序
则轴枢每次有三种情况 ==n/2,>,<
==n/2 便可直接返回
>n/2 则对轴枢之前的再选择
<n/2 则对轴枢之后的选择
*/
//给一个数组,返回第n/2大的数
int f(int a[],int n){
int s=0,e=n-1; //s,e为数组的头和尾
int low=s,high=e; //选择排序用的指针
while(1){
int key=a[low];
while(low<high){
while(low<high&&a[high]>=key)
high--;
a[low]=a[high];
while(low<high&&a[low]<=key)
low++;
a[high]=a[low];
}
a[low]=key;
//分三种情况
if(low==n/2-1)
return a[low];
else if(low<n/2-1){
s=low+1;
low=s;
high=e;
}
else{
e=low;
low=s;
high=e;
}
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
cout<<f(a,10);
return 0;
}