计数排序
计数排序不是一个比较排序算法,该算法于1954年由 Harold H. Seward提出。
01 算法步骤
-
找到数列的最大值,计为
max -
新建一个长度为
max + 1的数组,计为bucket -
遍历数列,在
bucket中找到值对应的下标,若对应下标里已有值,值加 1,若无值,将值设置为 1,例如值为5,则找到 bucket 中下标为 5 的位置,即
bucket [5],若bucket [5]不存在,则设置bucket [5]为1,即bucket [5] = 1,若bucket [5]存在,则值加 1,即bucket [5]++ -
遍历
bucket,对于存在值的元素,设其值为count,下标为index,往结果数组中插入count个元素,元素的值为index例如bucket [5] = 3,则count = 3,index = 5,往结果数组中插入 3 个 5。
02 示例
我们取 2, 3, 8, 7, 1, 2, 2, 2, 7, 3, 9, 8, 2, 1, 4, 2, 4, 6, 9, 2 来示范
-
找到最大值为 9
-
新建一个长度为 10 的数组,[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-
找到下标 2,将其值置为 1,得 [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
找到下标 3,将其值置为 1,得 [0, 0, 1, 1, 0, 0, 0, 0, 0, 0]
找到下标 8,将其值置为 1,得 [0, 0, 1, 1, 0, 0, 0, 0, 1, 0]
找到下标 7,将其值置为 1,得 [0, 0, 1, 1, 0, 0, 0, 1, 1, 0]
找到下标 1,将其值置为 1,得 [0, 1, 1, 1, 0, 0, 0, 1, 1, 0]
找到下标 2,将其内值加 1,得 [0, 1, 2, 1, 0, 0, 0, 1, 1, 0]
找到下标 2,将其内值加 1,得 [0, 1, 3, 1, 0, 0, 0, 1, 1, 0]
找到下标 2,将其内值加 1,得 [0, 1, 4, 1, 0, 0, 0, 1, 1, 0]
找到下标 7,将其内值加 1,得 [0, 1, 4, 1, 0, 0, 0, 2, 1, 0]
找到下标 3,将其内值为 1,得 [0, 1, 4, 2, 0, 0, 0, 2, 1, 0]
找到下标 9,将其值置为 1,得 [0, 1, 4, 2, 0, 0, 0, 2, 1, 1]
找到下标 8,将其内值加 1,得 [0, 1, 4, 2, 0, 0, 0, 2, 2, 1]
找到下标 2,将其内值加 1,得 [0, 1, 5, 2, 0, 0, 0, 2, 2, 1]
找到下标 1,将其内值加 1,得 [0, 2, 5, 2, 0, 0, 0, 2, 2, 1]
找到下标 4,将其值置为 1,得 [0, 2, 5, 2, 1, 0, 0, 2, 2, 1]
找到下标 2,将其内值加 1,得 [0, 2, 6, 2, 1, 0, 0, 2, 2, 1]
找到下标 4,将其内值加 1,得 [0, 2, 6, 2, 2, 0, 0, 2, 2, 1]
找到下标 6,将其值置为 1,得 [0, 2, 6, 2, 2, 0, 1, 2, 2, 1]
找到下标 9,将其内值加 1,得 [0, 2, 6, 2, 2, 0, 1, 2, 2, 2]
找到下标 2,将其内值加 1,得 [0, 2, 7, 2, 2, 0, 1, 2, 2, 2]
-
遍历 [0, 2, 7, 2, 2, 0, 1, 2, 2, 2]
插入

本文详细介绍了计数排序算法的原理与步骤,并通过实例展示了排序过程。同时,提出了基于最小值的计数排序优化方法,减少空间浪费,适用于元素为整数且排列密集的场景。
最低0.47元/天 解锁文章
2857

被折叠的 条评论
为什么被折叠?



