题目:
实现一个排序算法,给公司年龄排序,公司几万人,要求时间复杂度为O(n),空间复杂度为常数。
思路:
公司年龄范围在1-100之间,所以可以用一个size为100的数组来存储每个年龄对应的人数,然后从小到大输出该年龄对应次数即可。
#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;
void sort(vector<int> &nums)
{
int size = nums.size();
vector<int> count(100, 0);
for (int i = 0; i < size; ++i)
count[nums[i]-1]++;
int index = 0;
for (int i = 0; i < 100; ++i)
for (int j = 0; j < count[i]; ++j)
nums[index++] = i+1;
}
int main()
{
int arr[] = { 90, 90, 91, 93, 91, 89, 88, 89, 100, 1 };
vector<int> nums(arr, arr + 10);
sort(nums);
for (int i = 0; i < nums.size(); ++i)
cout << nums[i] << " ";
cout << endl;
return 0;
}