1.计数排序
T(n)=O(n),S(n)与桶的数量有关,算法稳定。
int* countingSort(int* A, int n) { // write code here int Max=A[0];//确定桶的数量 for(int i=1;i<n;i++) Max=Max<A[i]?A[i]:Max; vector<vector<int> > data(Max+1); for(int i=0;i<n;i++) data[A[i]].push_back(A[i]); int k=0; for(int i=0;i<data.size();i++){ for(int j=0;j<data[i].size();j++) A[k++]=data[i][j]; } return A; }
2.基数排序
T(n)=O(n*m),m是所排序的最大位数。
S(n)=O(n),算法稳定。
int* radixSort(int* A, int n) { vector<vector<int> > data(10); for(int p=1;p<=4;p++){ for(int i=0;i<n;i++){ int num=(A[i]%(int)pow(10,p))/pow(10,p-1); data[num].push_back(A[i]); } int k=0; for(int i=0;i<data.size();i++){ for(int j=0;j<data[i].size();j++) A[k++]=data[i][j]; data[i].clear(); } } return A; }