编程语言
首页 > 编程语言> > 排序算法:堆排序

排序算法:堆排序

作者:互联网

 

//  算法1 :调整为最小堆,再申请空间存放排好序的数组
// T = O( NlogN )

void Heap_Sort ( ElementType A[], int N ) {
    BuildHeap ( A );      // O( N )
    for ( i=0; i<N; i++ ) 
        TmpA[i] = DeleteMin( A ); //弹出堆顶  O( logN )
    for ( i=0; i<N; i++ )
        A[i] = TmpA[i];  // O( N )
}  


//  算法2 :循环调整为最大堆,交换堆顶与最后一个元素,从大到小筛选
// T = O( Nlog logN )

void Heap_Sort ( ElementType A[], int N ) {
    for ( i=N/2; i>=0; i-- ) 
        PercDown ( A, i, N );  //调整最大堆的函数,i:根结点,N:最后一个结点
    for ( i=N-1; i>0; i-- ) {
        Swap( &A[0], &A[i] );    //最大元素放最后
        PercDown ( A, 0, i );   // 剩下的元素调整成最大堆
    }
}

 

标签:结点,--,元素,堆排序,PercDown,算法,排序,调整
来源: https://www.cnblogs.com/Pio-GD/p/14380016.html