スタックソートはどんな体験ですか


時間の複雑さ:O(n*logn)は特にデータ量が大きい場合(百万級データ)に適している.高速並べ替えと集計並べ替えはいずれも再帰に基づいているため,データ量が大きい場合にスタックオーバーフローが発生しやすい.ソート速度は速い列よりやや低い.不安定なソートアルゴリズムでもある.例えば、3 27 27 36は、スタックトップ3が先に出力されると、第3層(最後の27)がスタックトップに走り、その後スタックが安定し、スタックトップを出力し続け、さっきの27であり、これは、後の27が第2の位置の27より先に出力され、不安定であることを示している.
#include 
using namespace std;
typedef struct SqList
{
    int r[10] = {1,8,12,3,14,5,13,15,23,45};
    int length = 9;
}SqList;

void m_swap(SqList *L ,int s ,int m)//s,m         
{
    int temp = L -> r[s];
    L -> r[s] = L -> r[m];
    L -> r[m] = temp ;
}
void HeapAdjust(SqList *L , int s , int m)//   
{
    int temp ,j;
    temp = L -> r[s];
    for( j = 2 * s ;j <= m; j *= 2)//               
    {
        if(j < m && L->r[j] < L->r[j + 1])
            ++j;//j            
        if(temp >= L->r[j])
            break;
        L->r[s] = L->r[j];
        s = j;
    }
    L->r[s] = temp;//  
}

void HeapSort(SqList *L)
{
    int i;
    for(i = L->length / 2; i > 0; i--)
        HeapAdjust(L , i , L->length);// L        
    for(i = L->length; i > 1; i--)
    {
        m_swap(L,1,i);//              
        HeapAdjust(L, 1 ,i - 1);//       
    }
}

int main()
{
    SqList L;
    for(int i = 0; i < 10; i++)
    {
        cout << L.r[i] << " ";
    }
    cout << endl;
    HeapSort(&L);
    for(int i = 0; i < 10; i++)
    {
        cout << L.r[i] << " ";
    }
    cout << endl;

}