1:基数排序
-
基数排序是一种非比较型的整数排序算法,其原理是将整数按照位分割成不同的数字,然后按照每个位置分别比较,该方法也可以适用于字符串(名字或者是日期)和特定格式的浮点数
-
0——9的桶,或者是A-Z的桶
-
1,2,5,9,0,4,8,7,3,19,34,78,23,89,76,73
- 代码实现
void maximumGap(vector<int>& nums) {
if(nums.size() < 2) return 0;
int exp = 1;
vector<int> buf(nums.size());
int maxVal = *max_element(nums.begin(),nums.end());
// 10000 = 5
while(maxVal >= exp) {
vector<int> cnt(10);
for (int i = 0; i < nums.size(); i++) {
int digit = (nums[i] / exp) % 10;
cnt[digit]++;
}
for (int i = 1; i < 10; i++) {
cnt[i] += cnt[i - 1]; // cnt[1]
}
for (int i = nums.size() - 1; i >= 0; i--) {
int digit = (nums[i] / exp) % 10;
buf[cnt[digit] - 1] = nums[i];
cnt[digit]--;
}
copy(buf.begin(), buf.end(), nums.begin());
exp *= 10;
}
for(int i = 0; i < nums.size(); i++){
cout << nums[i] << " ";
}
2:计数排序
- hashArray,其中array中的数值表示了该下标在数组中出现的次数
- 0,就是没有出现,1,出现了一次,2出现了两次