基數排序

#include <iostream>
#include<algorithm>
using namespace std;

class RadixSort {
public:
    int* radixSort(int* A, int n) {
        int index[10];
        int** c = new int*[10];
        for (size_t i = 0; i < 10; i++)
        {
            c[i] = new int[n];
        }

        int max = 0;
        for (int i = 0; i<n; i++)
        if (A[i] > max) max = A[i];
        int k = 1;
        while (max != 0){
            for (int i = 0; i<10; i++){
                index[i] = 0;
                for (int j = 0; j<n; j++)
                    c[i][j] = 0;
            }//c[10][6]={0}
            for (int i = 0; i<n; i++){
                int t = A[i] / k % 10;
                c[t][index[t]] = A[i];
                index[t]++;
            }
            int r = 0;
            for (int i = 0; i<10; i++)
            for (int j = 0; j<index[i]; j++)
                A[r++] = c[i][j];
            max = max / 10;
            k = k * 10;

        }
        return A;
    }
};
int main(int argc, char *argv[])
{
    int a[]={16,7,3,20,17,8};
    int size;
    RadixSort* hs = new RadixSort();
    int* resu = hs->radixSort(a, 6);
    int i;
        for (i = 0; i < 6; i++)
            cout << resu[i] << " ";
        cout << endl;
        system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章