基数排序的基本思想:
原理类似桶排序,这里总是需要10个桶,多次使用
首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数
然后再以十位的值进行装桶
最后在以百位的值进行装桶
这样倒出的值为011 014 023 072 084 101
对于一个int数组,请编写一个基数排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。
class RadixSort { public: int* radixSort(int* A, int n) { vector<int> pail[10]; int pow = 1; int base = 1000;//题目给出元素均小于2000 for(;pow <= base;pow *= 10) { //清空桶 for(int i = 0; i < 10; ++i) pail[i].clear(); // 放入桶中 for(int i = 0; i < n; ++i) { int digit = (A[i]/pow) % 10; pail[digit].push_back(A[i]); } //从桶中倒出来 int count = 0; for (int i = 0; i < 10; ++i) { for (int j = 0; j < pail[i].size(); ++j) { A[count++] = pail[i][j]; } } } return A; } };