堆排序-------------->_<

简介

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
图片来自algs4.cs.princeton.edu

java代码实现

注:具体实现可以参考 ———>http://algs4.cs.princeton.edu

这是只是我的代码

package com.gcp.www;

public class HeapSort {

    public int[] heapSort(int[] A, int n) {
        // write code here
        int N = A.length;
        //构建堆有序
        for(int k = n/2 ; k >=1; k-- ){
            sink(A,k,N); //从二叉堆的一半进行由右边向左边的扫描,构造堆有序(大根堆)
        }
        //进行堆的一个修复工作(保证堆有序后进行堆的修复工作从而进行排序)
        //将大根堆的顶点和最后一个节点进行交换并且将堆的大小减去1;
        while(N > 1 ){
            exch(A,1,N);
            N--;
            //修复堆(已经是堆有序了,直接用下沉法即可修复堆)
            sink(A,1,N);
        }

        return A;
    }

    private void sink(int[] a,int k,int n){ //下沉  
        while(2*k <= n){
            int j = 2*k;
            if( j < n && less(a,j,j+1)){ //说明最后一个含有右枝并且右枝大于左枝
                j++;
            }
            if(less(a,k,j)){ //比较k 和 j 所在位置数的大小
                //交 换
                exch(a,k,j);
            }else //
                break;
            k = j;
        }
    }
    private void exch(int[] a,int i,int j){
        int temp = a[i-1];
        a[i-1] = a[j-1];
        a[j-1] = temp;

    }
    private boolean less(int[] a,int i,int j){

        return a[i-1] < a[j - 1] ?true:false;
    }

    public static void main(String[] args) {
        int[] A = {54,35,48,36,27,12,44,44,8,14,26,17,28,-1,-3};
        A = new HeapSort().heapSort(A, A.length);
        for (int i : A) {
            System.out.println(i);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值