堆排序

来源:互联网 发布:微信公众号淘宝返利 编辑:程序博客网 时间:2024/06/01 07:36
堆排序:不稳定,O(nlogn)
package datasort;//堆排序O(nlogn)public class HeapSort {public static void print(int[] array){for(int i=0;i<array.length;i++){System.out.print(array[i]+" ");}System.out.println();}public static void swap(int[] array,int index1,int index2){int temp=array[index1];array[index1]=array[index2];array[index2]=temp;}public static void main(String[] args) { int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };  System.out.println("Before heapSort:"); print(array); heapSort(array); System.out.println("After heapSort:"); print(array);}public static void heapSort(int[] array) {if (array == null || array.length <= 1) {return;}buildMaxHeap(array);for (int i = array.length - 1; i >= 1; i--) {swap(array, 0, i);maxHeap(array, i, 0);}}public static void buildMaxHeap(int[] array) {if (array == null || array.length <= 1) {return;}int half = array.length / 2;for (int i = half; i >= 0; i--) {maxHeap(array, array.length, i);}}private static void maxHeap(int[] array, int heapSize, int index) {int left = index * 2 + 1;int right = index * 2 + 2;int largest = index;if (left < heapSize && array[left] > array[index]) {largest = left;}if (right < heapSize && array[right] > array[largest]) {largest = right;}if (index != largest) {swap(array, index, largest);maxHeap(array, heapSize, largest);}}}

0 0
原创粉丝点击