堆的應用之堆排序

void AdjustDown1(int* b, int n, int i)     //向下調整,建立大堆  
{  
    int parent = i;  
    int child = parent * 2 + 1;  
    while (child < n)  
    {  
        if (child + 1 < n&&b[child + 1] > b[child])  
        {  
            ++child;  
        }  
        if (b[child]>b[parent])  
        {  
            swap(b[child], b[parent]);  
            parent = child;  
            child = parent * 2 + 1;  
        }  
        else  
        {  
            break;  
        }  
    }  
}  


int b[] = { 10, 11, 1, 2, 3, 85, 96, 4, 23, 52 };  
void SortHeap(int* b, size_t n)//堆排序  升序   --》建立大堆  
{  
    for (int i = (n - 2) >> 2; i >= 0; --i)//建堆  
    {  
    AdjustDown1(b, n, i);  
}  
int end = n - 1;  //end 爲最後一個數的下標  
while (end)       //不斷的取堆頂最大的數放到後面,--end,調整堆。  
{  
    swap(b[0], b[end]);   
    AdjustDown1(b, end,0);  
    --end;  
}  
for (int i = 0; i < n; ++i)  
{  
    cout << b[i] << " ";  
}  
cout << endl;  
發佈了123 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章