计数排序(Counting Sort),计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 像快速排序、堆排序、归并等排序算法都是基于比较的排序算法,计数排序是一种线性排序算法,不需要进行比较,对于数列的每个元素x,找出比x小的数的个数,从而确定x在排好序的数组中的位置。此算法需要辅助数组,是以空间换时间。此算法适合最大值不大的情况,如果元素个数n不大,但是最大值很大,会造成空间浪费,计数排序只适合元素是整数,小规模的排序.
算法的步骤如下:
(1)找出待排序的数组中最大和最小的元素
(2)统计数组中每个值为i的元素出现的次数,存入数组C的第i项
(3)对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
(4)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1
计数排序
.版本 2 .支持库 spec .子程序 计数排序, , , 计数排序 .局部变量 array, 整数型, , "0" .局部变量 max, 整数型 .局部变量 局变_桶子, , , "0" .局部变量 局变_排序后, , , "0" .局部变量 n1, 整数型 .局部变量 i, 整数型 .局部变量 m1, 整数型 .局部变量 min, 整数型 .局部变量 d, 双精度小数型 array = { 95, 94, 91, 98, 99, 90, 99, 93, 91, 92 } max = array [1] .计次循环首 (10, i) .判断开始 (array [i] > max) max = array [i] .判断 (array [i] < min) min = array [i] .默认 .判断结束 .计次循环尾 () d = max - min 重定义数组 (局变_桶子, 假, d + 1) .计次循环首 (取数组成员数 (array), n1) ' 调试输出 (n1, 参数_原始 [n1]) ' 调试输出 (局变_桶子 [参数_原始 [n1]]) ‘ 最小不能为0 ,否则此处数组0 报错 局变_桶子 [array [n1]] = 局变_桶子 [array [n1]] + 1 .计次循环尾 () 重定义数组 (局变_排序后, 假, 取数组成员数 (array)) .计次循环首 (取数组成员数 (局变_桶子), n1) .如果真 (局变_桶子 [n1] > 0) .计次循环首 (局变_桶子 [n1], ) m1 = m1 + 1 局变_排序后 [m1] = n1 .计次循环尾 () .如果真结束 .计次循环尾 () array = 局变_排序后 调试输出 (array)