计数排序与vector练习
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<climits>
#include<cstring>
#include<cctype>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<array>
#include<algorithm>
#include<iostream>
#define MOD 1000000000000000007
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
void __countingSort(int n, vector<int> &arr);
int main(void) {
int n;
cin >> n;
vector<int> arr;
for (int i = 0; i<n; i++) {
int num;
cin >> num;
arr.push_back(num);
}
__countingSort(arr.size(), arr);
for (int i = 0; i<arr.size(); i++)
printf(i == n-1 ? "%d\n" : "%d ", arr[i]);
return 0;
}
void __countingSort(int n, vector<int> &arr) {
int maxNum = *max_element(arr.begin(), arr.end());
int minNum = *min_element(arr.begin(), arr.end());
int length = maxNum - minNum + 1;
int *help = new int[length];
//fill (help, help+length, 0);
memset(help, 0, length*sizeof(int));
for (int i = 0; i<n; i++)
help[arr[i]-minNum]++;
for (int i = 0, j = 0; i<= maxNum - minNum; i++) {
while(help[i]--)
arr[j++] = i+minNum;
}
return;
}