栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

堆排序(大根堆)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

堆排序(大根堆)

package DataStructure.mianshi;

public class HeapSort {
    private int[] items;
    private int N;
    public HeapSort(int capacity){
        items=new int[capacity+1];
        N=0;
    }
    private boolean less(int i,int j){
        return items[i]1){//如果到根节点则退出
            if(less(k/2,k)){//如果父节点小则交换 因为是大顶堆
                exch(k/2,k);
                k=k/2;
            }else{
                break;//优化比较次数
            }

        }
    }
    public void down(int k){
        while(k*2<=N){//如果是叶子结点(最后一层)
            //找到子节点中较大值
            int max;
            if(2*k+1<=N){//存在右子节点
                if(less(2*k,2*k+1)){
                    max=2*k+1;
                }else{
                    max=2*k;
                }
            }else{//不存在右子节点
                max=2*k;
            }
            //比较当前结点和子节点的较大者,如果当前结点不小,则结束循环
            if(!less(k,max)){
                break;
            }
            //当前结点小则交换
            exch(k,max);
            k=max;
        }
    }
}
class test{
    public static void main(String[] args) {
        HeapSort h=new HeapSort(6);
        h.insert(5);
        h.insert(6);
        h.insert(1);
        h.insert(4);
        h.insert(9);
        h.insert(7);
        for(int i=0;i<6;i++){
            System.out.println(h.delMax());
        }

    }
}

 

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1039970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号