
基数排序是一种基于数位的排序方式,具体可见wikipedia
我的实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#include <iostream> using namespace std; template <typename T> void (vector<T> &s) { int n = s.size(); int maxData = s[0]; for (int i = 1; i < n; ++i) { if (maxData < s[i]) maxData = s[i]; } int d = 1; int p = 10; while (maxData >= p) { maxData /= 10; ++d; } int i, j, k; int radix = 1; for (i = 1; i <= d; i++) { vector<int> cou[10]; for (j = 0; j < s.size(); j++) { int time; time = s[j] % (radix * 10); time /= radix; cou[time].push_back(s[j]); } int jishu = 0; for (k = 0; k < 10; k++) { for (j = 0; j<cou[k].size(); j++) { s[jishu] = cou[k][j]; jishu++; } } radix *= 10; } } int main() { vector<int> a; int number; cout << "输入您的样本容量" << endl; cin >> number; for(int i=0;i<number;i++) { int temp; cin >> temp; a.push_back(temp); } radixsort(a); for (int i = 0; i < a.size(); i++) cout << a[i]<<endl; return 0; }
|
近期评论