poj2388

package easy;


import java.io.BufferedInputStream;
import java.util.Scanner;

/**
*poj2388
* 排一次序后输出中位数,但效率太低了。
* 用计数排序可能好一点,当找到中位数就可以停止排序了。
* @author NC
*/
public class Poj2388 {

public static void main(String[] args) {
Scanner scan = new Scanner(new BufferedInputStream(System.in));
if (scan.hasNext()) {
int n = scan.nextInt();
int[] array = new int[n + 1];
for (int i = 0; i < n; i++) {
array[i + 1] = scan.nextInt();
}
quickSort(array);
System.out.println(array[n / 2 + 1]);

}
}

private static int partition(int[] array, int low, int high) {
int key = array[low]; //用子表的第一个记录作为枢轴记录
while (low < high) {//从表的两端交替地向中间扫描
while (low < high && array[high] >= key) {//比枢轴记录大的话,位置正确,移动下标
high--; //下标从高端向中间扫描
}
array[low] = array[high]; //把比枢轴记录小的记录交换到低端,(这里先从直接赋值,和下面的一起才算交换)
while (low < high && array[low] <= key) {//比枢轴记录小的话,位置正确,移动下标
low++; //下标从低端向中间扫描
}
array[high] = array[low]; //把比枢轴记录大的记录交换到高端,(这里赋值回去,和上面的一起才算交换)
}
array[low] = key; //枢轴记录到位
return low;
}

private static void qSort(int[] array, int low, int high) {
int pivotloc;
if (low < high) {//保证长度大于1,递归的出口
pivotloc = partition(array, low, high); //将表low-high一分为2,用枢轴位置来分
qSort(array, low, pivotloc - 1); //对低子表递归排序
qSort(array, pivotloc + 1, high); //对高子表递归排序
}
}

public static void quickSort(int[] array) {
int n = array.length - 1;
qSort(array, 1, n);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值