计数排序与桶排序

来源:互联网 发布:网络小额贷款公司牌照 编辑:程序博客网 时间:2024/05/16 19:33

计数排序时间复杂度O(n),空间复杂度O(n)

计数排序的基本思想是:统计一个数序列中小于某个元素a的个数为n,则直接把该元素a放到第n+1个位置上。当然当过有几个元素相同时要做适当的调整,因为不能把所有的元素放到同一个位置上。计数排序假设输入的元素都是0到k之间的整数

(1)统计数组中某个元素出现的个数k
(1)统计数组中小于等于某个元素a的个数n
(2)把元素a放到第n的位置,放置元素后要减1,因为当有几个元素相同时不能放到同意位置上

void countingSort(vector<int> &a){vector<int>::iterator it;it = max_element(a.begin(), a.end());vector<int> c(*it + 1, 0);for(int i = 0; i < a.size(); i++)c[a[i]]++;for(int i = 1; i < c.size(); i++)c[i] = c[i - 1] + c[i];vector<int> b(a.size(), 0);for(int i = 0; i < a.size(); i++){b[c[a[i]] - 1] = a[i];c[a[i]]--;}a.assign(b.begin(), b.end());}
桶排序:
(1)统计数组中某个元素出现的个数k
(2)根据统计结果,若出现次数n大于0,则将n个该数添加到目的数组中
void countingSort(vector<int> &a){vector<int>::iterator it = max_element(a.begin(), a.end());vector<int> c(*it + 1, 0);for(int i  = 0; i < a.size(); i++){c[a[i]]++;}vector<int> b;for(int i = 0; i < c.size(); i++){it = b.end();b.insert(it, c[i], i);}a.assign(b.begin(), b.end());}



0 0
原创粉丝点击