计数排序
Posted 无惧风云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计数排序相关的知识,希望对你有一定的参考价值。
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。[1-2] 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序)
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 const int maxn = 1000; 5 const int k = 1000; 6 vector<int> a(maxn); 7 vector<int> c(maxn); 8 vector<int> rand1(maxn); 9 int main() 10 { 11 int n; 12 cin >> n; 13 for (int i = 0; i < n; i++) 14 { 15 cin >> a[i]; 16 ++c[a[i]]; 17 } 18 for (int i = 1; i < k; i++) 19 { 20 c[i] += c[i - 1]; 21 } 22 for (int i = n - 1; i >= 0; --i) 23 { 24 rand1[--c[a[i]]] = a[i]; 25 } 26 for (int i = 0; i < n; i++) 27 { 28 cout << rand1[i] << " "; 29 } 30 cout << endl; 31 system("pause"); 32 return 0; 33 }
以上是关于计数排序的主要内容,如果未能解决你的问题,请参考以下文章