面试9:时间复杂度为O(n)的排序算法

来源:互联网 发布:java md5签名算法 编辑:程序博客网 时间:2024/04/28 00:03
题目:

实现一个排序算法,给公司年龄排序,公司几万人,要求时间复杂度为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;}


0 0