堆排序
2015-07-28 20:45
375 查看
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; } }
相关文章推荐
- apk 反编译记录
- 10个超有用的网页设计工具和资源
- 使用命令行WScript和vbs创建快捷方式
- Netty版本升级血泪史之线程篇
- iOS操作小整理
- FragmentPager +ViewPager +FragmentStatePagerAdapter详解
- [MySQL]LeetCode196 Delete Duplicate Emails
- oracle connect by 说明
- Jquery IE下报错:缺少标识符、字符串或数字
- iOS学习之旅之C语言day4
- Leetcode# 73 Set Matrix Zeroes
- DOM编程的思路
- 自定义ProgressBar样式custom_progressbar.xml
- c++ 11 声明
- 杭电 4006 The kth great number 队列 附题目翻译
- 哈弗曼编码
- JS判断是什么设备是什么浏览器-主要用移动页面开发
- UVA 11059
- DT大数据梦工厂 第70讲
- 产品经理与项目经理的区别