voidbucketSort(vector<int>&nums){int maxValue =*max_element(nums.begin(), nums.end());int minValue =*min_element(nums.begin(), nums.end());int range = maxValue - minValue;int count = range /10+1;
vector<vector<int>>buckets(count);for(auto it : nums){int index =(it - minValue)/10;
buckets[index].push_back(it);}for(int i =0; i < count; i++){sort(buckets[i].begin(), buckets[i].end());}int temp =0;for(auto bucket : buckets){for(auto it : bucket){
nums[temp++]= it;}}}
计数排序
voidcountSort(vector<int>&nums){int maxValue =*max_element(nums.begin(), nums.end());int minValue =*min_element(nums.begin(), nums.end());int range = maxValue - minValue +1;
vector<int>count(range);for(auto it : nums){
count[it - minValue]++;}int temp =0;for(int i =0; i < range; i++){while(count[i]-->0){
nums[temp++]= i + minValue;}}}
基数排序
voidcardinalSort(vector<int>&nums){
vector<vector<int>>buckets(19);int maxValue =*max_element(nums.begin(), nums.end());int minValue =*min_element(nums.begin(), nums.end());int temp =log10(max(abs(minValue),abs(maxValue)));for(int i =0; i <= temp; i++){for(auto it : nums){int index =abs(it)/(int)pow(10, i)%10;if(it <0){
index =9- index;}else{
index =9+ index;}
buckets[index].push_back(it);}int index =0;for(auto&bucket : buckets){for(auto it : bucket){
nums[index++]= it;}
bucket.clear();}}}