基于桶排序的两种排序
Posted lshao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于桶排序的两种排序相关的知识,希望对你有一定的参考价值。
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; }
以上是关于基于桶排序的两种排序的主要内容,如果未能解决你的问题,请参考以下文章