问题:查找一组随机数中第一个值的中位数索引
知识点:while循环,if函数,数组排序
思路:生成一组随机数,把第一个值拿出来,从末位倒序开始比较,比第一个值大,end–,直到遇到比第一个值小的停下;再从begin的索引开始正序比较,比第一个值小,begin++,直到遇到比第一个值大的停下;交换begin和end位置的数。当begin和end相遇时,这个位置就是第一个值中位数的位置,输出。代码如下:
Random rand = new Random();
int[] arr = new int[20];
for (int i = 0; i <arr.length ; i++) {
arr[i]=rand.nextInt(200)+1;
System.out.print(arr[i]+" ");
}
int mid = arr[0];
int begin = 0,end = arr.length-1,t;
while (begin<end){
if (arr[end]>=mid)end--;
else if (arr[begin]<=mid)begin++;
else {
t=arr[begin];
arr[begin]=arr[end];
arr[end]=t;
}
}
if (begin==end){
t=arr[begin];
arr[begin]=mid;
arr[0]=t;
}
System.out.println();
for (int c : arr) {
System.out.print(c+" ");
}
System.out.println();
System.out.println("中位数的索引是:"+begin);
输出结果如下:
68 153 1 101 62 144 33 1 19 80 103 147 56 25 80 188 166 4 46 144
56 46 1 4 62 25 33 1 19 68 103 147 80 144 80 188 166 101 153 144
中位数的索引是:9
第一行是原随机数,第二行是把第一个值插入正确顺序后的数,可以看到索引是9。