Java排序算法(二)--堆排序(HeapSort)

堆排序的思想是:
1.比较第i个位置与第2i和2i+1个位置上的节点值,将较大的元素上移;
2.重复1,使最大的元素移到根节点;
3.将根节点与最末的元素交换位置,递归1,2,3使剩下的n-1个元素也依次移到当前最后。

static void heapSort( int[]a ){
        for(int n=a.length;n>0;n--){             
        //n,i均表示的是位置,不是数组下标;从整个堆开始,
            for(int i=n/2;i>0;i--){ 
            //比较父节点与子节点的值,将大的往上调
                if((2* i< n)&&( a[ i-1]< a[2* i])){ //满二叉树
                    swap(a,i-1,2*i); //  不能使用swap(a[i-1],a[2*i]),因为数组传递不过去,不能对数组元素值进行处理
                }
                if( a[ i-1]< a[2* i-1]){
                    swap(a,i-1,2*i-1);
                }
            }
            swap(a ,0,n -1);  //每次找到最大值存储在最末的位置
        }
    }

堆排序的时间复杂度为:O(n*log2n)。堆排序是一种不稳定的排序方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值