码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序的java 实现

时间:2015-04-23 17:20:39      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

/*
 ***********完完整整的用堆排序来对一个序列进行排序 ************
 * */

import java.util.Random;
public class HeapSort {
    public static void main(String args[]){
        int[] a = new int[1050];
        InitList(a);//初始化
        PrintList(a);//打印随机生成的序列
     System.out.println();//打印一行空格,区分排序前还是排序后
new HeapSort().Heap_Sort(a); PrintList(a);//打印排序之后的序列 } /* ********************HeapSort****************** * */ public void Heap_Sort(int a[]){ int length = a.length; //建造一个堆 CreatHeap(a,length); for(int i = length ; i > 0 ; i-- ){ //把最小的放到最后边,然后重新构造小顶堆 int temp = a[0]; a[0] = a[i-1]; a[i-1] = temp; CreatHeap(a,i-1); } } /* ********************构造小顶堆********************* * */ public void CreatHeap(int a[],int length){ //从最后一个非叶节点开始,一个个逐渐向前调整来构造一个小顶堆 for(int i = length/2 ; i >=0 ; i--){ HeapAdjust(a,i,length); } } /* ************************调整小顶堆 ************************ * */ public void HeapAdjust(int a[],int pos,int length){ //pos为待调整节点,leftChild为待调整节点的左孩子,rightChild为带调整节点的右孩子 int leftChild = pos*2; int rightChild = pos*2+1; int min = pos; if(leftChild<length && a[leftChild]<a[min]){ min = leftChild; } if(rightChild<length && a[rightChild]<a[min]){ min = rightChild; } if(min !=pos){// 调整当前节点,若有比当前节点小的节点,则交换 int temp = a[pos]; a[pos] = a[min]; a[min] = temp; //交换后的节点可能会不满足小顶堆,则递归调整交换后的节点 //若min==pos,即上述交换过程没发生,则也不会执行次递归调整的过程 HeapAdjust(a,min,length); } //调整当前节点的孩子节点 } public static void InitList(int[] a){ Random intr = new Random(); for(int i = 0 ; i < a.length ; i ++){ a[i] =intr.nextInt(1000); } } public static void PrintList(int[] a){ for(int i = 0 ; i < a.length ; i ++){ System.out.print(a[i]+ " "); } } }

 

堆排序的java 实现

标签:

原文地址:http://www.cnblogs.com/ooon/p/4450940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!