1)问题描述
给定一个无序集和一个数k,找这个无序集中第k小的数。
2)基本思路
思路就是将无序集排序,然后从左到右第k个就是答案了。
问题就是如何排序,最优的排序方式就是找到无序集的中位数,然后利用该中位数进行快排,递归下去就ok。而如何找到中位数?把所有的无序集分成每5个一组,找到每组的中位数,然后把每组的中位数排列成一个新的集合,然后该集合的中位数就是整个无序集的中位数。
3)代码实现
package laoya;
import java.lang.Math;
import java.util.Arrays;
import java.util.Scanner;
public class test {
//————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
public static void swap(int i,int j,int a[]) {
//数组内元素的交换
int temp = a[i];
a[i]=a[j];
a[j]=temp;
}
public static void BubbleSort(int a[],int low,int high) {
//冒泡排序
for(int i=low;i<high;i++) {
for(int j =low;j<high-i;j++) {
if(a[j]>a[j+1]){
swap(j,j+1,a);
}
}
}
}
public static int Sortmiddate1(int a[],int low,int high) {
//用来找小数组(5位)的中位数(基准)
BubbleSort(a