快排:
快排一次划分的应用:
1. 长度为n的数组的中查找第 k大的数字
2. 长度为n的数组的中查找前 k大的数字,等等
O(n)复杂度的排序:
例题:
某公司几万名的员工,现对员工的年龄进行排序,复杂度要求为O(n),提示,可以使用 常量级别的辅助空间。
分析:
由于是年龄的排序,那么可以申请一个数组,数组的下标表示年龄,对应下标里统计此年龄出现的次序,这样间接的就完成了排序工作。
代码实现:
void sortAge(int *age, int length)
{
if (age == NULL || length <= 0)
return;
const int oldestAge = 99;
for (int i = 0; i < length; i++)
{
if (age[i] < 0 || age[i]>oldestAge)
throw new std::exception("data is error");
}
int timesOfAge[oldestAge + 1] = { 0 }; //常量级的辅助空间
for (int i = 0; i < length; i++)
{
timesOfAge[age[i]]++;
}
for (int i = 0; i <= oldestAge;i++) //打印数据
if (timesOfAge[i] != 0)
cout << i << " years old have: " << timesOfAge[i] << endl;
}