排序算法之Java实现2——堆排序算法

package com.sorts;


public class HeapSort {


/**
* 调整生成小根堆
* @param a
* @param pos
* @param len
*/
public static void ajustminheapsort(int[] a, int pos, int len){
int child;
for(int temp = a[pos]; 2*pos+1<len; pos=child){
child = 2*pos+1;
if(child+1<len && a[child]>a[child+1])
{
child++;
}
if(a[child]>a[pos])
break;
a[pos] = a[child];
a[child] = temp;
}
}

/**
* 小根堆,堆排序
* 时间复杂度为:
* 最好O(nlogn);平均O(nlogn);最坏O(nlogn)
* 空间复杂度为: O(1)
* @param a
*/
public static void minheapsort(int[] a){
int temp;
//调整建堆
for(int i=a.length/2-1; i>=0; i--){
ajustminheapsort(a, i, a.length);
}
//交换首位,重新调整小根堆
for(int j=a.length-1; j>=0; j--){
temp = a[0];
a[0] = a[j];
a[j] = temp;
ajustminheapsort(a, 0, j);
}
}

public static void main (String args[])
{
int i;
int[] a = {2,6,3,1,5,0};
minheapsort(a);
for(i=0; i<a.length; i++){
System.out.println("a["+i+"]="+a[i]);//小根堆的首尾交换后,最终生成的是一个从大到小的有序数列
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值