简谈桶排序

176 阅读1分钟

桶排序是不基于比较的排序,其中这个桶可以是数组、队列、栈等等

一.计数排序

比如我想给一组年龄排序,[1,13,5,1,13] 正常情况年龄范围是0-200,是有限的,那么我就准备200个桶,一个长度为200的数组,初始值都是0,开始遍历年龄,出现了1,给1索引数字加1,出现了13,给13索引数字加1,依次操作,最终这个桶是这样[0,2,0,0,0,1,...2...] 然后将非0的数把索引写几遍,就是[1,1,5,13,13],这样就实现了排序

二.基数排序

适应范围是正整数 就是找到一组数最大的那个数,然后将其它数字都用0补齐成最大数的位数,如果是十进制,就准备0-9的10个桶,每个桶是一个队列,然后从左往右,先按个位进桶,全部进桶后再出桶,然后再从左往右,按十位进桶,全部进桶后再出桶,直到走完最高位,这样就实现了基数排序。 当然具体实现可以不需要准备这么多队列,用两个数组就可以模拟进桶出桶过程。