zoukankan      html  css  js  c++  java
  • 堆排序

    堆排序,首先对初始化的堆进行下虑操作使得堆满足堆序。也就是建堆的过程。

    然后将堆顶元素与堆尾元素互换,在进行delete堆顶操作。

     1 private static int[] heapSort(int[] arr) {
     2         if (arr==null||arr.length<2) {
     3             return arr;
     4         }
     5         for (int i = arr.length/2; i>=0; i--) {
     6             percDown(arr, i, arr.length);     // buildHeap;
     7         }
     8         for(int i=arr.length-1;i>0;i--){
     9             swap(arr, 0, i);
    10             percDown(arr, 0, i);  //deleteMax;
    11         }
    12             return arr;
    13     }
    14     
    15     private static void percDown(int[] arr,int index,int len) {
    16         int child=0,tmp=0;
    17         for (tmp=arr[index]; leftChild(index) < len; index=child) {
    18             child=leftChild(index);
    19             if(child!=len-1&&arr[child]<arr[child+1])
    20                 child++;
    21             if (tmp<arr[child]) 
    22                 arr[index]=arr[child];
    23         }
    24         arr[index]=tmp;
    25     }
    26     
    27     private static int leftChild(int i) {
    28         return 2*i+1;
    29     }
    30     
    31     private static void swap(int[] arr, int j, int i) {
    32         int tmp=arr[j];
    33         arr[j]=arr[i];
    34         arr[i]=tmp;
    35     }
  • 相关阅读:
    SQL注入方法之:获取列名
    手把手教会你模拟退火算法
    我的G++编译选项
    编译器优化误解程序员的意思
    ZKW线段树
    扩展欧几里得算法
    快速幂
    乘法取模
    莫队算法良心讲解
    高精度模板
  • 原文地址:https://www.cnblogs.com/peng111/p/5770053.html
Copyright © 2011-2022 走看看