基数排序

来源:互联网 发布:国产pdf编辑软件 编辑:程序博客网 时间:2024/06/06 01:33
/*Function Name: RadixSortAuthor: lungfeiDate: 2013-10-02*/#include <iostream>using namespace std; int getMax(int arr[], int n){    int max = arr[0];    for (int i = 1; i < n; ++i){if (arr[i] > max)           { max = arr[i];}}    return max;}void CountingSort(int arr[], int n, int exp){    int *output = new int [n];    int i, count[10]; memset(count, 0, sizeof(count));    for (i = 0; i < n; i++)    {++count[(arr[i]/exp)%10];}     for (i = 1; i < 10; i++)    {count[i] += count[i-1];}     for (i = n - 1; i >= 0; i--)    {        output[count[ (arr[i]/exp)%10 ] - 1] = arr[i];        --count[ (arr[i]/exp)%10 ];    }     for (i = 0; i < n; i++)      {arr[i] = output[i];}} /*基数排序又称为“桶子法”(Bucket Sort)或(Bin Sort)时间复杂度:O(k*N)N是待排序元素个数,k是数字位数*/void RadixSort(int arr[], int n){    int max = getMax(arr, n);     for (int exp = 1; max/exp > 0; exp *= 10)    {CountingSort(arr, n, exp);}}void Print(int arr[], int n){    for (int i = 0; i < n; ++i){        cout << arr[i] << " ";}cout<<endl;} int main(){    int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};    int n = sizeof(arr)/sizeof(arr[0]);    RadixSort(arr, n);    Print(arr, n);system("pause");    return 0;}

原创粉丝点击