【排序算法】——堆排序

来源:互联网 发布:淘宝上的星巴克月饼券 编辑:程序博客网 时间:2024/05/17 05:03

场景:代码实现堆排序,选择使用Java代码

思路:分成以下两个步骤

  • 建堆:从下往上建立,从数组的中间开始建并不断调整堆
  • 交换堆顶调整堆:把堆顶元素放到当前堆最后面并不断调整堆
代码实现
public class HeapSort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint array[] = {1,7,4,23,5,7,0,12,67,11,5};for(int i:array){System.out.print(" "+i);}System.out.println("排序后");heapSort(array);for(int i:array){System.out.print(" "+i);}}public static void heapAdjust(int[] array,int beg,int end){int lChild = beg*2+1;int rChild = beg*2+2;int max = beg;//用来保证非叶子结点开始检索int flag = end%2==0 ? end/2-1 : end/2;if(beg <= flag){if(lChild <= end && array[lChild] > array[max]){max = lChild;}if(rChild <= end && array[rChild] > array[max]){max = rChild;}if(max != beg){array[max] = array[max]^array[beg];array[beg] = array[max]^array[beg];array[max] = array[max]^array[beg];heapAdjust(array,max,end);}}}public static void heapSort(int[] array){//建立堆(从下往上建立)int size = array.length;for(int i = size/2-1; i >= 0; i--){heapAdjust(array,i,size-1);}//交换堆顶后在调整堆for(int i = size-1; i >= 0; i--){array[0] = array[0]^array[i];array[i] = array[0]^array[i];array[0] = array[0]^array[i];heapAdjust(array,0,i-1);}}}



0 0
原创粉丝点击