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

堆排序(不理解)

时间:2015-07-28 22:30:17      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

package sort;

import java.util.Scanner;

public class HeapSort {
    public static int arr[];
    static{
        System.out.println("Please enter the array to sort, and use ‘,‘ as a separator:");
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        String n[]=s.split(",");
        arr=new int[n.length];
        System.out.println("Before sort:");
        for(int i=0;i<arr.length;i++){
            arr[i]=Integer.parseInt(n[i]);
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void main(String args[]){
        int m=arr.length-1;
        heapSort(m);
        System.out.println("After sort:");
        for(int i=0;i<=m;i++)
            System.out.print(arr[i]+" ");
        System.out.println();
    }
    public static void heapSort(int m){
        int temp=0;
        for(int i=(m+1)/2;i>=1;i--)
            createHeap(m+1,i);  //创建整个初始大根堆
        for(int i=m;i>=1;i--){  //控制范围,逐渐缩小
            createHeap(i+1,1);  //创建根堆
            temp=arr[0];
            arr[0]=arr[i];
            arr[i]=temp;
            System.out.print("Current sorting:");
            for(int k=0;k<=m;k++)
                System.out.print(arr[k]+" ");
            System.out.println();
        }
    }
    //下面的方法是创建大根堆,每运行一次,都能找到堆的根部的数据
    public static void createHeap(int m,int i){  //创建根堆
        int j=2*i;
        int temp=arr[i-1];
        while(j<=m){
            if(j<m && arr[j-1]<arr[j])  //找一个最大的数
                j++;
            if(temp<=arr[j-1]){  //判断第一个数是否比最大的数小
                arr[i-1]=arr[j-1];
                i=j;
                j=2*i;
            }
            else break;
        }
        arr[i-1]=temp;
    }

}

 

堆排序(不理解)

标签:

原文地址:http://www.cnblogs.com/lvbubu/p/4684287.html

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