基数排序
来源:互联网 发布:国产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;}