c++计数排序例子

#include<iostream>
#include<vector>
using namespace std;
//计数排序
void CountSort(vector<int> &arr,int maxVal){
int len = arr.size();
if(len<1){
return;
}
vector<int> count(maxVal+1,0);//辅助计数数组
vector<int> tmp(arr);//辅助数组
for(auto x : arr){//对每个数字出现了几次进行计数
count[x]++;
}
for(int i=1;i<=maxVal;++i){//对于每个元素x,计算出比x小和它自己相等的元素的个数
count[i]+=count[i-1];
}
for(int i=len-1;i>=0;--i){//将对应的值放到相对应数组下标的地方
arr[count[tmp[i]]-1]=tmp[i];
count[tmp[i]]--;
}


}


int main(){

vector<int> arr = { 1,5,3,7,6,2,8,9,4,3,3 };
int maxVal=9;
CountSort(arr,maxVal);
for(auto x : arr){
cout<<x<<" ";
}

cout<<endl;
return 0;
}

猜你喜欢

转载自www.cnblogs.com/xufeng123/p/12628683.html