基于LinkedList实现桶排序

时间:2023-03-08 18:47:46

需要考虑以下问题:

  1、桶的大小,这里我们可以根据输入的元素的个数来确定桶的大小。

  2、怎么样确定当前元素进入哪一个桶,这里我们使用到的是通过一个哈希函数来进行计算。

int index =  (element * length) / (max + 1);
element为当前元素的值,length为桶的大小,max为数组中最大元素的值

  3、因为输入的数据是随机的,所以有可能在一个桶中分布着好几个数据,那么怎么样维持在一个桶中的顺序呢?因为涉及到桶中元素的数量的不确定性,所以我们可以使用动态的数据结构来存储,可以用ArrayList或者LinkedList,考虑到插入的操作是比较频繁的,所以这里我们使用链表来进行插入元素,并且在一个桶中维持从小到大的顺序。在一开始的时候我们扫描桶的元素,找到第一个比当前需要插入的元素大或者相等的的元素,那么将这个元素往前插入就可以了。

  具体的代码在以前的博客中已经粘出:https://www.cnblogs.com/xiaoyh/p/10283863.html

总结:

  像这种题目要使用原生的Java ListApi的话就不太好使,还不如自己定义一个链表来实现这些功能,所以我们学习数据结构并不是去学习如何去使用这些Java封装好的API,而是自己去实现这些数据结构,灵活运用自己定义的数据结构来解决题目,灵活地根据题目的需求去改造数据结构,让它适用于要解决的题目。我们学习数据结构的目的呢就是学习这些经典数据结构的思想,比如先进先出,先进后出这些。然后利用这些来更方便,更省时的解决题目。