第一种方法, 主要是分组每组五个排序,取中位数,再取中位数的中位数然后进行分割,根据MoM和k的比较进行递归查找。
但是貌似当数量一大的时候,容易出现问题。暂时留有一定的疑问。这个的复杂度也是O(n)。
//选择排序
void SelectSort(long* A,int len=5){
for (int i=0; i<len; i++) {
for (int j=i+1; j<len; j++) {
if(A[i]>A[j]){
long t=A[i];
A[i]=A[j];
A[j]=t;
}
}
}
}
//划分A 长度是len 把A分成比x大的和和比x小的两部分
int Partition(long *A,int len,long x){
//初始化三个数组
//left是比x小的 right是比x大的 middle是和x一样的
long left[Max_N],right[Max_N],middle[Max_N];
int left_len=0,right_len=0,middle_len=0;
//循环的去看A中各个元素 然后放在不同的数组里
for (int k=1; k<=len; k++) {
if(A[k-1]<x)
left[left_len++]=A[k-1];
else if(A[k-1]>x)
right[right_len++]=A[k-1];
else