Java算法-堆排序
- package org.rut.util.algorithm.support;
- import org.rut.util.algorithm.SortUtil;
- public class HeapSort implements SortUtil.Sort{
- /* (non-Javadoc)
- * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
- */
- public void sort(int[] data) {
- MaxHeap h=new MaxHeap();
- h.init(data);
- for(int i=0;i<data.length;i++)
- h.remove();
- System.arraycopy(h.queue,1,data,0,data.length);
- }
- private static class MaxHeap{
- void init(int[] data){
- this.queue=new int[data.length+1];
- for(int i=0;i<data.length;i++){
- queue[++size]=data<i>;
- fixUp(size);
- }
- }
- private int size=0;
- private int[] queue;
- public int get() {
- return queue[1];
- }
- public void remove() {
- SortUtil.swap(queue,1,size--);
- fixDown(1);
- }
- //fixdown
- private void fixDown(int k) {
- int j;
- while ((j = k << 1) <= size) {
- if (j < size && queue[j]<queue[j+1])
- j++;
- if (queue[k]>queue[j]) //不用交换
- break;
- SortUtil.swap(queue,j,k);
- k = j;
- }
- }
- private void fixUp(int k) {
- while (k > 1) {
- int j = k >> 1;
- if (queue[j]>queue[k])
- break;
- SortUtil.swap(queue,j,k);
- k = j;
- }
- }
- }
- }
- SortUtil:
- package org.rut.util.algorithm;
- import org.rut.util.algorithm.support.BubbleSort;
- import org.rut.util.algorithm.support.HeapSort;
- import org.rut.util.algorithm.support.ImprovedMergeSort;
- import org.rut.util.algorithm.support.ImprovedQuickSort;
- import org.rut.util.algorithm.support.InsertSort;
- import org.rut.util.algorithm.support.MergeSort;
- import org.rut.util.algorithm.support.QuickSort;
- import org.rut.util.algorithm.support.SelectionSort;
- import org.rut.util.algorithm.support.ShellSort;
- public class SortUtil {
- public final static int INSERT = 1;
- public final static int BUBBLE = 2;
- public final static int SELECTION = 3;
- public final static int SHELL = 4;
- public final static int QUICK = 5;
- public final static int IMPROVED_QUICK = 6;
- public final static int MERGE = 7;
- public final static int IMPROVED_MERGE = 8;
- public final static int HEAP = 9;
- public static void sort(int[] data) {
- sort(data, IMPROVED_QUICK);
- }
- private static String[] name={
- "insert", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "heap"
- };
- private static Sort[] impl=new Sort[]{
- new InsertSort(),
- new BubbleSort(),
- new SelectionSort(),
- new ShellSort(),
- new QuickSort(),
- new ImprovedQuickSort(),
- new MergeSort(),
- new ImprovedMergeSort(),
- new HeapSort()
- };
- public static String toString(int algorithm){
- return name[algorithm-1];
- }
- public static void sort(int[] data, int algorithm) {
- impl[algorithm-1].sort(data);
- }
- public static interface Sort {
- public void sort(int[] data);
- }
- public static void swap(int[] data, int i, int j) {
- int temp = data<i>;
- data<i> = data[j];
- data[j] = temp;
- }
- }
Java算法-堆排序的更多相关文章
- JAVA算法系列 冒泡排序
java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...
- JAVA算法系列 快速排序
java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...
- java算法 蓝桥杯 乘法运算
问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...
- java算法 蓝桥杯 扶老奶奶街
一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- java算法 蓝桥杯 格子位置
问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...
- java算法----排序----(6)希尔排序(最小增量排序)
package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...
- java算法----排序----(5)归并排序
package log; import java.util.Arrays; public class Test4 { /** * java算法---归并排序 * * @param args */ pu ...
- java算法----排序----(4)快速排序
package log; public class Test4 { /** * java算法---快速排序 * * @param args */ public static void main(Str ...
随机推荐
- HDU 4964 Emmet --模拟
题意:给你一个字符串,要求把它按语法转化成HTML格式. 分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了.简直醉了. 处理id和class时, ...
- eclipse菜单解释及中英对照《二》
上篇文章主要介绍了eclipse中每个大的标题下的中英文及其用法. 感谢http://blog.csdn.net/li_jinjian2005/article/details/2831641这个博主. ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- linux如何挂载windows下的共享文件
说明:windows下有一共享文件夹APP,windows本地ip是192.168.9.155现在需要在linux服务器上挂载这个APP文件夹,linux服务器ip是192.168.9.200 操作记 ...
- git review报错一例
在线上修改代码,最后使用git review提交代码审核的时候出现报错如下:[wangshibo@115~]$ vim testfile #修改代码[wangshibo@115~] ...
- js判断滚动条到底部
判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop.clientHeight.scrollHeight. scrollTop为滚动条在Y轴上的滚动距离. clientHeight为内容 ...
- zepto源码注解
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- 26Spring_的注解实际应用_关键整理一下之前的注解
写一个银行转账案例, 案例结构如下:
- 【转】【C#】判断两个文件是否相同
使用System.security.Cryptography.HashAlgorithm类为每个文件生成一个哈希码,然后比较两个哈希码是否相同 该哈希算法为一个文件生成一个小的二进制“指纹”,从统计学 ...
- [转]hive实例讲解实现in和not in子句
FROM : http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2842855.html 目前hive不支持 in或not in 中包含查询子句的 ...