项目名称:学习计数排序算法
一、项目意义
其中SAC COUNT - 排序缩短了算法实现过程的时间,算法设置相当简单,适用性很强,
所以想和大家分享一下。 理解和学习算法的过程。
2.地图内容:
一。
了解算法及其重要性。
计算设置、分析和应用。
b.
计数排序是一种通过建立整数值统计表的排序算法
C。 描述要解决的方法/算法。
– 构建数组 dd[i],dd[i] 为整数 i 出现的次数。
– 称 GTMAX 为待排序整数的最大值,N 为待排序元素的个数。
步骤1:dd[i]=0,i=0..GTMAX。
步骤2:浏览要排序的数字,统计每个值为i的数字:dd[i]=dd[i]+1;
第三步:完成,并根据需要使用。
算法复杂度:O(max(GTMAX, N))
d. 设置/代码
上面的代码只处理小于10^6的正整数,但是如果要对负数进行排序,也可以按照上面的标记思路进行操作,
不过C++好像不支持访问数组具有负索引,因此我们可以创建额外的数组来标记负数,
并从计数中过滤掉负数和正数的两个数组。
样品测试:
e. 评估优缺点并进行比较:
缺点:
– 只能对整数进行排序。
– 必须知道整数的取值范围。
– 大于10^7的值范围将无法创建dd数组进行存储。
优势:
– 安装简单。
– 算法复杂度取决于值域。
比较:
示例1:
– 假设要排序的元素数量为10^6,最大元素值为10^9
因此,根据数据的大小,我们选择合适的排序算法
F。 检测结果
例如:
步骤一:初始化dd数组
DD 0 1 2 3 4 5 6 7 8
我 0 0 0 0 0 0 0 0 0
第2步:
DD 0 1 2 3 4 5 6 7 8
我 0 1 0 0 0 0 0 0 0
步骤3:
DD 0 1 2 3 4 5 6 7 8
我 0 1 0 0 1 0 0 0 0
步骤4:
DD 0 1 2 3 4 5 6 7 8
我 0 1 1 0 1 0 0 0 0
第5步:
DD 0 1 2 3 4 5 6 7 8
我 0 1 1 0 1 0 0 1 0
第6步:
DD 0 1 2 3 4 5 6 7 8
我 0 1 1 0 1 0 0 1 1
第7步:
DD 0 1 2 3 4 5 6 7 8
我 0 1 2 0 1 0 0 1 1
步骤8:
DD 0 1 2 3 4 5 6 7 8
我 0 2 2 0 1 0 0 1 1
第9步:
DD 0 1 2 3 4 5 6 7 8
我 0 2 2 1 1 0 0 1 1
第10步:
DD 0 1 2 3 4 5 6 7 8
我 0 2 2 1 1 0 0 1 2
第11步:
DD 0 1 2 3 4 5 6 7 8
我 0 2 2 1 1 0 1 1 2
步骤12:
DD 0 1 2 3 4 5 6 7 8
我 0 2 3 1 1 0 1 1 2
所以排序后的结果是:1,1,2,2,2,3,4,6,7,8,8。
评论留言
暂时没有留言!