• 堆排序


    算法2:

     1 void Swap( ElementType *a, ElementType *b )
     2 {
     3     ElementType t = *a;
     4     *a = *b;
     5     *b = t;
     6 }
     7 
     8 void PercDown( ElementType A[], int p, int N )
     9 {
    10     /* 改编代码4.24的PercDown( MaxHeap H, int p )    */
    11     /* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */
    12     int Parent, Child;
    13     ElementType X;
    14 
    15     X = A[p]; /* 取出根结点存放的值 */
    16     for( Parent = p; (Parent*2+1) < N; Parent = Child )
    17     {
    18         Child = Parent * 2 + 1;
    19         if( (Child != N-1) && (A[Child] < A[Child+1]) )
    20             ++Child;    /* Child指向左右子结点的较大者 */
    21         if( A[Child] > X )
    22             A[Parent] = A[Child];   /* 下滤X */
    23         else     /* 找到了合适位置 */
    24             break;
    25     }
    26     A[Parent] = X;
    27 }
    28 
    29 void HeapSort( ElementType A[], int N )
    30 {
    31     /* 堆排序 */
    32     int i;
    33 
    34     for ( i=N/2-1; i>=0; i-- )/* 建立最大堆 */
    35         PercDown( A, i, N );
    36 
    37     for ( i=N-1; i>0; i-- )
    38     {
    39         /* 删除最大堆顶 */
    40         Swap( &A[0], &A[i] ); 
    41         PercDown( A, 0, i );
    42     }
    43 }

  • 相关阅读:
    如何在Altium中下载并添加软件没有的苦文件【转】
    20121124
    变量作用域&函数作用域
    http相关知识
    函数声明和函数表达式
    js中constructor和prototype
    委托模式
    js跨域
    原型和原型链
    javascript 数据类型
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9516515.html
Copyright © 2020-2023  润新知