计数排序(Counting Sort)
2018-03-14 19:33
274 查看
计数排序(Counting Sort)
只要从输入数组A的末尾元素开始选择,计数排序就属于稳定的排序算法。优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。这是一种牺牲空间换取时间的做法。
当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序。
基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)),如归并排序,堆排序)
原理
这里以数字非负作为前提条件。新建数组B,数组B的长度=数组A的最大值-最小值+1。
统计数组中每个值为i的元素出现的次数,存入数组B的第i项。
从数组B中秩为1的位置开始,每一项和前一项相加,这样就得到了A中比A[i]大的数字有多少个。
从后往前将每个元素i放在新数组C的第B[i]项,每放一个元素就将B[i]减去1
代码
#include <iostream> using namespace std; const int MAXN = 100000; const int k = 1000; // range int a[MAXN], c[MAXN], ranked[MAXN]; int main() { int n; cin >> n; for (int i = 0; i < n; ++i) { cin >> a[i]; ++c[a[i]]; } for (int i = 1; i < k; ++i) c[i] += c[i-1]; for (int i = n-1; i >= 0; --i) ranked[--c[a[i]]] = a[i]; for (int i = 0; i < n; ++i) cout << ranked[i] << " "; cout<<endl; }
相关文章推荐
- 算法导论 第八章计数排序(counting sort)
- 排序总结系列九:计数排序(Counting sort)
- 算法总结系列之三 : 计数排序(CountingSort)
- 计数排序(Counting Sort)与比特计数排序(Bit Counting Sort)
- 计数排序(Counting-Sort)
- 计数排序:counting-sort
- 排序算法六:计数排序(Counting sort)
- 计数排序(Counting Sort)
- 计数排序(CountingSort)的实现
- counting sort 计数排序
- 计数排序(CountingSort)
- 计数排序(Counting-Sort)
- 算法数据结构C++实现4-计数排序(counting sort)
- 无聊写排序之 ---- 计数排序(CountingSort)
- 计数排序(Counting Sort)
- 计数排序 (Counting Sort)
- 计数排序(counting_sort) 算法分析
- radix sort 基数排序 和 counting sort 计数排序
- 计数排序(Counting Sort)
- 计数排序(counting-sort)