排序算法——计数排序

小鱼儿 2022-06-12 00:44 288阅读 0赞

前言

计数排序的思想:在给定的数组中,依次寻找比当前数字小的元素的个数(count),统计之后直接使用t就可以定位到该数所在的位置,因为比它小的元素的个数已经通过count计算出来了,所以直接填充就可以了。

1. 编码

  1. //display
  2. template<typename T> struct Disp
  3. {
  4. void operator()(T value)
  5. {
  6. cout << value << "\t";
  7. }
  8. };
  9. void CountSort(std::vector<int> vec)
  10. {
  11. int len(vec.size());
  12. if(len == 0) return;
  13. cout << "display origin array:" << endl;
  14. for_each(vec.begin(), vec.end(), Disp<int>()); //打印原始的数据
  15. std::vector<int> vec1(len, 0);
  16. bool flag[len] = {false};
  17. for(int i=0; i<len; ++i)
  18. {
  19. int m_count = 0;
  20. for(int j=0; j<len; ++j)
  21. {
  22. if(vec[j]<vec[i] && !flag[j])
  23. {
  24. ++m_count;
  25. }
  26. }
  27. vec1[m_count] = vec[i];
  28. flag[i] = true;
  29. }
  30. cout << "\narray sorted:" << endl;
  31. for_each(vec1.begin(), vec1.end(), Disp<int>());
  32. }

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线性排序算法计数排序

    线性排序 时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort),桶排序、计数排序、基数排序就是常见的线性排序,之所以能做到线性,他们不是通过比

    相关 排序算法 - 计数排序

    基本思想 计数排序是一种线性排序算法,它利用了一个数组,因为数组下标的增长是线性的,所以它就把自己的元素转换成新开辟数组的下标。可是下标都是非负数啊?数组当中的值有正有负

    相关 排序算法计数排序

    \[非比较排序-计数排序\] 1.算法思想 计数排序要求数据必须是有确定范围的整数,需要定义一个新的数组,新数组的长度是根据原数组最大值和最小值来确定的,该数组用

    相关 排序算法——计数排序

    排序算法——计数排序 > 计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,快于任何比较排序算法。 这是一种牺牲空间换取时间的做法,当O(k)>

    相关 线性排序算法-计数排序

    我们前面分析过几种排序算法,时间复杂度为O(![n^\{2\}][n_2])如[冒泡排序,插入排序和选择排序][Link 1]等,时间复杂度为O(nlogn),如[归并排序][

    相关 排序算法 —— 计数排序

    引言 计数排序是桶排序思想的一种具体实现,针对一些具有特殊限制的样本数据,如公司员工年龄,那么样本数据本身就一定在0~200之间,针对这样的数据,使用从0到200 的桶数

    相关 排序算法——计数排序

    前言 计数排序的思想:在给定的数组中,依次寻找比当前数字小的元素的个数(count),统计之后直接使用t就可以定位到该数所在的位置,因为比它小的元素的个数已经通过coun