計數排序的原址排序

weixin_34019929發表於2016-02-22

演算法導論第八章思考題8-2.e答案,最後還是百度了答案,並不會,記錄一下。

計數排序(穩定)
    for i = 0 to k
        c[i] = 0
    for j = 1 to A.length
        c[a[j]]++;  
    for i = 1 to k
        c[i]+=c[i-1];  
    for j = A.length down to 1
        b[c[a[j]]] = a[j]
        c[a[j]]--
計數排序原址排序(不穩定)
    for i = 0 to k
        c[i] = 0
    for j = 1 to A.length
        c[a[j]]++;  
    //將A初始化為0向量。  
    //之後無需插入0元素  
    for j = 1 to A.length
        A[j]=0;  
    //根據C中計數從後向前插入資料  
    //如果C[l]==C[l-1],說明l已經插入完畢或A中本來就沒有l元素  
    for (int l=k;l>=1;l--)  
        while (C[l]!=C[l-1])  
            //這裡C[l]--減去1是因為陣列下標從0開始  
            A[(C[l]--)-1]=l;

相關文章