基数排序基本思想:计数排序是一个类似于桶排序的排序算法,其优势是对已知数量范围的数组进行排序。它创建一个长度为这个数据范围的数组C,C中每个元素记录要排序数组中对应记录的出现个数。
对于上述例子,认为人的身高在100cm--300cm之间,然后建立200个桶(pail),桶中存的是对应元素的个数,即pail[185]=2。当所有的元素都放进桶中后,在按照顺序将桶中元素倒出。
#include <iostream> #include <algorithm> #include "string.h" #include "stdio.h" #include <vector> #include <deque> #include<stack> using namespace std; class Sort { public: int* countingSort(int* A, int n) { int* pail = new int[1000];//定义1000个桶 int* result = new int[n]; int j=0; for(int i=0;i<1000;i++)//初始化桶 { pail[i]=0; } for(int i=0;i<n;i++) { pail[A[i]]++; } for(int i=0;i<1000;i++) { if(pail[i]!=0) { for(int k=pail[i];k>0;k--) { result[j++]=i; } } } return result; } }; int main() { int array[]={3,4,5,1,4,8,7}; Sort sort; int len = sizeof(array)/sizeof(array[0]); int* arr = sort.countingSort(array,len); for(int i=0;i<len;i++) { cout<<arr[i]<<" "; } cout<<endl; return 0; }