在博主的上一篇文章里图解了基数排序的原理和代码实现,本文对上一篇文章里的实现方法做一些优化,如果没有看过的小伙伴可以移步上一篇文章:
《八种排序算法之七:图解基数排序》
在上一篇的基数排序中,我们比喻了十个桶来存储每次循环得到的余数,并且需要把桶内的元素按照“ 先放进来,先拿出去 ” 的原则拿出,重新组成数组,作为下一轮循环的开始数组。
我们为此还使用了二维数组,又专门写了一个数组去存储桶内元素的位置信息,在取出时方便拿出。
但我们做到关心放入“桶”内元素的位置吗?
还是说我们只需要做到先放进去的先拿出来就可以了?
手动分割线,大家可以自己先思考一下。
细心的小伙伴可能就已经明白,这个 “ 先进先出 ”的原则不就正是队列的特征么,完全可以使用队列来达成这一目的。
基于这个想法,我们直接调用队列的那个类(在文章后面有队列类的代码),使用队列来替换原有的二维数组。
// 用于临时存储数据的十个队列
MyQueueRadixSort[] temp = new MyQueueRadixSort[10];
然后把循环找的数据放在队列中,使用队列的方法
// 用于临时存储数据的十个队列
MyQueueRadixSort[] temp = new MyQueueRadixSort[10];
在每一轮