关于堆排序请参看:
http://128kj.iteye.com/blog/1679094
POJ2388题意:
【输入】第一行为n,接下来n行分别为一个数;
【输出】这n个数排序后的中位数
样例:
Sample Input
5
2
4
1
3
5
Sample Output
3
分析:好象用多种排序法都可以AC,这里先用堆排序,主要是复习一下堆排序代码。
排一次序后输出中位数,但效率太低了。这里先不管了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] array =new int[n+1];
// array[0]=100; 不参与,下标从1开始
for(int i=1;i<=n;i++)
array[i]=in.nextInt();
heapSort(array);//堆排序
System.out.println(array[n / 2+1 ]);
//堆排序的结果
// for(int i=1;i<=n;i++)
// System.out.print(array[i]+" ");
}
//把a,b位置的值互换
public static void swap(int[] array, int a, int b) {
//临时存储child位置的值
int temp = array[a];
array[a]=array[b];
array[b]=temp;
}
/*将数组调整成堆
*根据树的性质建堆,树节点前一半一定是分支节点,即有孩子的,所以我们从这里开始调整出初始堆
*/
public static void adjust(int[] array){
for (int i = array.length / 2; i > 0; i--)
adjust(array,i, array.length-1);
}
/**
* 调整堆,使其满足堆得定义
* @param i
* @param n
*/
public static void adjust(int[] array,int i, int n) {
int child;
for (; i <= n / 2; ) {
child = i * 2;
if(child+1<=n&&array[child]<array[child+1])
child+=1;/*使child指向值较大的孩子*/
if(array[i]< array[child]){
swap(array,i, child);
/*交换后,以child为根的子树不一定满足堆定义,所以从child处开始调整*/
i = child;
} else break;
}
}
//对一个最大堆heap排序
public static void heapSort(int[] array) {
adjust(array);//建堆
for (int i = array.length-1; i > 0; i--) {
/*把根节点跟最后一个元素交换位置,调整剩下的n-1个节点,即可排好序*/
swap(array,1, i);
adjust(array,1, i - 1);
}
}
}
分享到:
相关推荐
NULL 博文链接:https://128kj.iteye.com/blog/1754177
NULL 博文链接:https://128kj.iteye.com/blog/1749213
NULL 博文链接:https://128kj.iteye.com/blog/1753387
NULL 博文链接:https://128kj.iteye.com/blog/1744222
NULL 博文链接:https://128kj.iteye.com/blog/1744555
北大POJ2388-Who's in the Middle 解题报告+AC代码
NULL 博文链接:https://128kj.iteye.com/blog/1750462
* 排序:例如 poj2388、poj2299。 * 简单并查集的应用。 * 哈希表和二分查找等高效查找法:例如 poj3349、poj3274、poj2151、poj1840、poj2002、poj2503。 * 哈夫曼树:例如 poj3253。 * 堆:例如 poj2513。 *...
NULL 博文链接:https://128kj.iteye.com/blog/1772172
NULL 博文链接:https://128kj.iteye.com/blog/1752661
NULL 博文链接:https://128kj.iteye.com/blog/1759266
NULL 博文链接:https://128kj.iteye.com/blog/1757060
NULL 博文链接:https://128kj.iteye.com/blog/1746750
twilight-poj-solutionPOJ () solution by twilight想当年要找一题的分析, 解答实在太难了现在都是开源的时代了, 干脆把Archive放到GitHub上, 供后来人参考.POJ ID: 部分题解: 转载请注明出处~
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
NULL 博文链接:https://128kj.iteye.com/blog/1740501
LeetCode判断字符串是否...排序(快排) POJ 1007 POJ 2388 POJ 1804 POJ 2299 高效查找 POJ 1002 POJ 3349 POJ 3274 POJ 1840 POJ 2002 POJ 3432 POJ 2503 Leetcode 33 哈夫曼树、优先队列 POJ 3253 trie树 POJ 251
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
NULL 博文链接:https://128kj.iteye.com/blog/1733777