基於LinkedList實現桶排序

須要考慮如下問題:html

  一、桶的大小,這裏咱們能夠根據輸入的元素的個數來肯定桶的大小。數組

  二、怎麼樣肯定當前元素進入哪個桶,這裏咱們使用到的是經過一個哈希函數來進行計算。數據結構

int index =  (element * length) / (max + 1); element爲當前元素的值,length爲桶的大小,max爲數組中最大元素的值

  三、由於輸入的數據是隨機的,因此有可能在一個桶中分佈着好幾個數據,那麼怎麼樣維持在一個桶中的順序呢?由於涉及到桶中元素的數量的不肯定性,因此咱們可使用動態的數據結構來存儲,能夠用ArrayList或者LinkedList,考慮到插入的操做是比較頻繁的,因此這裏咱們使用鏈表來進行插入元素,而且在一個桶中維持從小到大的順序。在一開始的時候咱們掃描桶的元素,找到第一個比當前須要插入的元素大或者相等的的元素,那麼將這個元素往前插入就能夠了。函數

  具體的代碼在之前的博客中已經粘出:https://www.cnblogs.com/xiaoyh/p/10283863.html學習

總結:spa

  像這種題目要使用原生的Java ListApi的話就不太好使,還不如本身定義一個鏈表來實現這些功能,因此咱們學習數據結構並非去學習如何去使用這些Java封裝好的API,而是本身去實現這些數據結構,靈活運用本身定義的數據結構來解決題目,靈活地根據題目的需求去改造數據結構,讓它適用於要解決的題目。咱們學習數據結構的目的呢就是學習這些經典數據結構的思想,好比先進先出,先進後出這些。而後利用這些來更方便,更省時的解決題目。code

相關文章
相關標籤/搜索