以基数排序为例:
#include#include using namespace std; //基数排序,时间复杂度O(N) class radixsort { public: static void radixSort(vector & arr) { if (arr.empty() || arr.size() < 2) return;//数组为空或者长度小于2不需要排序 radixSort(arr, 0, arr.size() - 1, maxbits(arr)); } //计算有几位数 static int maxbits(vector & arr) { int max_num = INT_MIN; for (int i = 0; i < arr.size(); i++) { max_num = max(max_num, arr[i]); } int res = 0; while (max_num != 0) { res++; max_num /= 10; } return res; } static void radixSort(vector & arr, int L, int R, int digit) { int radix = 10;//十进制,10个桶 int i = 0, j = 0; vector bucket(R - L + 1); //一共digit次入桶出桶 for (int d = 1; d <= digit; d++) { vector count(radix,0); for (int i = L; i <= R; i++) { j = getDigit(arr[i], d);//找到对应位上的数,第d位的数 count[j]++; } //计算前缀和,count[i] 表示第d位上的数<=i的个数有几个 for (i = 1; i < radix; i++) { count[i] = count[i] + count[i - 1]; } //bucket是已经排好序的 for (i = R; i >= L; i--) { j = getDigit(arr[i], d); bucket[count[j] - 1] = arr[i]; count[j]--; } //copy回原数组中 for (i = L, j = 0; i <= R; i++,j++) { arr[i] = bucket[j]; } } } static int getDigit(int x, int d) { return (x / ((int)pow(10, d - 1)) % 10); } }; int main() { int n = 10; vector arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } radixsort::radixSort(arr); for (int i = 0; i < n; i++) { cout << arr[i] << endl; } return 0; }
发现将类内的函数设置为静态函数,就可以在类外函数中直接调用了(PS:但是类成员函数必须是public的情况才可),谨在此记录一下。



