20230407 9.3. 堆排序

选择排序

void Selection_Sort ( ElementType A[], int N )
{ 
    for ( i = 0; i < N; i ++ ) {
        MinPosition = ScanForMin( A, i, N–1 ); 
        /* 从A[i]到A[N–1]中找最小元,并将其位置赋给MinPosition */
        Swap( A[i], A[MinPosition] );
        /* 将未排序部分的最小元换到有序部分的最后位置 */
    }
}
  • 无论如何: \(T = Θ( N2 )\)

堆排序

void Heap_Sort ( ElementType A[], int N )
{ .
    for ( i=N/2-1; i>=0; i-- )/* BuildHeap */
        PercDown( A, i, N ); 
    for ( i=N-1; i>0; i-- ) { 
        Swap( &A[0], &A[i] ); /* DeleteMax */
        PercDown( A, 0, i ); 
    } 
}
  • 定理:堆排序处理N个不同元素的随机排列的平均比较次数是 $2NlogN - O(NloglogN) $
  • 虽然堆排序给出最佳平均时间复杂度,但实际效果不如用Sedgewick增量序列的希尔排序
posted @ 2023-06-21 16:23  流星<。)#)))≦  阅读(2)  评论(0编辑  收藏  举报