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: }


    
    
  • 相关阅读:
    socket套接字
    popen:让进程看似文件
    fdopen:让文件描述符像文件一样使用
    计算机"右击"管理,不出现界面,解决方案
    javaEE版本的eclipse中导入工程,发现server里面找不到工程,根本发布不了也不能运行
    初识springMVC
    数据库系统
    Red hat 下nfs服务器的搭建
    Linux下MySQL安装和配置
    复习Hibernate(1)
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020505.html
Copyright © 2011-2022 走看看