堆排序 java语言
2015-03-16 13:59
239 查看
<pre name="code" class="java">public class HeapSort { public static void main(String[] args) { new HeapSort().Start(); } private void Start() { /*定义数组*/ int[] array = {4,1,3,2,16,9,10,14,8,7}; //建立数组最大堆 BuildMaxHeap(array); printArray("最大堆数组:",array); for(int i=array.length-1;i>=1;i--) { Exchange(array,0,i); MaxHeapify(array,i,0); } printArray("排序后数组:",array); } private void printArray(String s,int[] array) { System.out.println(s); for(int i:array) { System.out.print(i + " "); } System.out.println(); } private void BuildMaxHeap(int[] array) { if (array == null || array.length <= 1) { return; } for(int i=array.length/2;i>=0;i--) { MaxHeapify(array,array.length,i); } } private void MaxHeapify(int[] array,int heapsize, int i) { int largest=0; int l = Left(i); int r = Right(i); if(l < heapsize && array[l] > array[i]) { largest = l; } else { largest = i; } if(r < heapsize && array[r] > array[largest]) { largest = r; } if(largest != i) { Exchange(array,i,largest); MaxHeapify(array,heapsize,largest); } } //考虑下这个函数的写法 private void Exchange(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } //注意 private int Right(int i) { return (2*i+2); } private int Left(int i) { return (2*i+1); } }
运行后结果为:
最大堆数组:
16 14 10 8 7 9 3 2 4 1
排序后数组:
1 2 3 4 7 8 9 10 14 16
相关文章推荐
- JAVA语言之堆排序
- 数据结构与算法(11)---Java语言实现:堆排序
- heapsort堆排序(3种语言实现 c/java/python)
- 排序算法之堆排序--Java语言
- 排序算法——堆排序(java语言描述)
- Heap Sort堆排序 Java语言实现
- 堆排序(java 语言实现)
- 数据结构与算法(12)---Java语言实现:堆排序(续)
- Java语言编程中更新XML文档的常用方法
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(1)
- Java语言和C++语言的差异——老生常谈
- Java多语言编码问题解析(1)
- Java语言的Socket编程
- Java语言白皮书
- Java语言的Socket编程
- Java多语言编码问题解析(2)
- Java语言和C++语言的差异
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2)
- Java语言入门 -- 第二章 Java程序编译与运行环境
- 对JAVA语言的十个常见误解