这个是计数排序:
const int N = 100010;
const int W = 100010;
int n, w, a[N], cnt[W], b[N];
void counting_sort() {
memset(cnt, 0, sizeof(cnt));
for (int i = 1; i <= n; ++i) ++cnt[a[i]];
for (int i = 1; i <= w; ++i) cnt[i] += cnt[i - 1];
for (int i = n; i >= 1; --i) b[cnt[a[i]]--] = a[i];
}
这个是桶排序:
const int N = 100010;
int n, w, a[N];
vector<int> bucket[N];
void insertion_sort(vector<int>& A) {
for (int i = 1; i < A.size(); ++i) {
int key = A[i];
int j = i - 1;
while (j >= 0 && A[j] > key) {
A[j + 1] = A[j];
--j;
}
A[j + 1] = key;
}
}
void bucket_sort() {
int bucket_size = w / n + 1;
for (int i = 0; i < n; ++i) {
bucket[i].clear();
}
for (int i = 1; i <= n; ++i) {
bucket[a[i] / bucket_size].push_back(a[i]);
}
int p = 0;
for (int i = 0; i < n; ++i) {
insertion_sort(bucket[i]);
for (int j = 0; j < bucket[i].size(); ++j) {
a[++p] = bucket[i][j];
}
}
}
但是还有另一种形式的桶排序:
#include<iostream>
using namespace std;
int n,b[100000005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
b[x]++;
}
for(int i=1;i<=100000000;i++){
for(int j=1;j<=b[i];j++){
cout<<i<<' ';
}
}
return 0;
}
问:
在复习初赛,像看一下各个排序,然后就发现了这个问题,我目前的思考如下:
希望有大佬来教教我这个蒟蒻。