zoukankan      html  css  js  c++  java
  • 每天一个小算法(Heapsort)

    <pre name="code" class="cpp">1: /*
       2:     输入:数组A,堆的长度hLen,以及需要调整的节点i
       3:     功能:调堆
       4: */
       5:  
       6: void AdjustHeap(int A[], int hLen, int i)
       7: {
       8:     int left = LeftChild(i);  //节点i的左孩子
       9:     int right = RightChild(i); //节点i的右孩子节点
      10:     int largest = i;
      11:     int temp;
      12:  
      13:     while(left < hLen || right < hLen)
      14:     {
      15:         if (left < hLen && A[largest] < A[left])
      16:         {
      17:             largest = left;
      18:         }
      19:         
      20:         if (right < hLen && A[largest] < A[right])
      21:         {
      22:             largest = right;
      23:         }
      24:  
      25:         if (i != largest)   //如果最大值不是父节点
      26:         {
      27:              temp = A[largest]; //交换父节点和和拥有最大值的子节点交换
      28:              A[largest] = A[i];
      29:              A[i] = temp;
      30:  
      31:             i = largest;         //新的父节点,以备迭代调堆
      32:             left = LeftChild(i);  //新的子节点
      33:             right = RightChild(i);
      34:         }
      35:         else
      36:         {
      37:             break;
      38:         }
      39:     }
      40: }
      41:  
      42: /*
      43:     输入:数组A,堆的大小hLen
      44:     功能:建堆
      45: */
      46: void BuildHeap(int A[], int hLen)
      47: {
      48:     int i;
      49:     int begin = hLen/2 - 1;  //最后一个非叶子节点
      50:     for (i = begin; i >= 0; i--)
      51:     {
      52:         AdjustHeap(A, hLen, i);  
      53:     }
      54: }
      55:  
      56: /*
      57:     输入:数组A,待排序数组的大小aLen
      58:     功能:堆排序
      59: */
      60: void HeapSort(int A[], int aLen)
      61: {
      62:     int hLen = aLen;
      63:     int temp;
      64:  
      65:     BuildHeap(A, hLen);      //建堆
      66:  
      67:     while (hLen > 1)
      68:     {
      69:         temp = A[hLen-1];    //交换堆的第一个元素和堆的最后一个元素
      70:         A[hLen-1] = A[0];
      71:         A[0] = temp;
      72:         hLen--;        //堆的大小减一
      73:         AdjustHeap(A, hLen, 0);  //调堆
      74:     }
      75: }


    
    
  • 相关阅读:
    redhat 7 配置yum本地源
    redhat 7 安装oracle12.1
    Send Email in Robot Framework Python Using Gmail
    Robot Framework 自定义关键字 Ignore error
    Robot Framework Change chrome language
    Chrome profile manager
    Robot Framework 安装AutoItLibrary
    Robot Framework Chrome
    8 结构型模式-----桥接模式
    7 结构型模式-----适配器模式
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020505.html
Copyright © 2011-2022 走看看