选择排序
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] );
        /* 将未排序部分的最小元换到有序部分的最后位置 */
    }
}
堆排序
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增量序列的希尔排序