使用C++實現桶排序算法

桶排序是一種非比較型排序算法,通過將待排序元素分配到多個“桶”中,對每個桶內元素單獨排序後合併,實現整體排序。核心是合理劃分桶,使每個桶元素數量少,降低排序成本。 以[0,1)範圍內的浮點數爲例,算法步驟:1. 創建n個空桶(n爲數組長度);2. 按元素x的桶索引x*n(取整數部分)分配到對應桶;3. 各桶內用std::sort排序;4. 合併所有桶元素。 C++實現中,`bucketSort`函數通過vector<vector<double>>創建n個桶,遍歷元素分配,排序後合併。測試驗證了算法正確性。 複雜度:平均時間O(n)(元素均勻分佈時),最壞O(n log n)(所有元素入同一桶);空間O(n)。適用於數據分佈均勻、範圍明確的數值型數據,數據不均時性能退化。 該算法在數據分佈合理時高效,尤其適合統計分析中的區間數據排序。

閱讀全文
使用C++實現計數排序算法

**計數排序**是一種非比較型排序算法,核心思想是通過統計元素出現次數構建排序數組,適用於整數範圍不大的場景(如學生成績、年齡)。 **基本思路**:以數組`[4,2,2,8,3,3,1]`爲例,步驟爲:1. 確定最大值(8),創建計數數組`count`統計各元素出現次數(如`count[2]=2`);2. 按計數數組順序將元素插入結果數組,得到排序結果`[1,2,2,3,3,4,8]`。 **實現要點**:C++代碼中,先找最大值,統計次數,構建結果數組並複製回原數組。關鍵步驟包括計數數組初始化、統計次數、按次數填充結果數組。 **複雜度**:時間複雜度O(n+k)(n爲數組長度,k爲數據範圍),空間複雜度O(k)。 **適用場景**:非負整數且範圍小,需高效排序;負數可通過偏移量轉換(如加最小值)處理。 計數排序通過“計數-構建”邏輯實現線性時間排序,是處理小範圍整數

閱讀全文
使用Python實現基數排序算法

基數排序是一種非比較型整數排序算法,核心思想是按數字每一位(從低位到高位)分桶收集。基本步驟:先確定數組中最大數的位數,再從最低位到最高位,對每一位數字進行“分桶”(0-9共10個桶)和“收集”操作,將當前位數字相同的元素放入同一桶,按桶順序收集更新數組,直至所有位處理完畢。Python實現通過循環位數、計算當前位數字分桶並收集,時間複雜度爲O(d×(n+k))(d爲最大數位數,n爲數組長度,k=10),空間複雜度O(n+k)。適合位數少的整數數組,處理負數時可先轉正數排序再恢復符號。

閱讀全文
使用Python實現計數排序算法

計數排序是高效非比較型排序算法,適用於整數且取值範圍較小的場景,時間複雜度O(n+k)(n爲元素數,k爲數據範圍)。核心步驟:1.確定數據範圍(找min和max);2.構建計數數組統計各元素出現次數;3.按順序輸出計數數組元素(次數對應輸出次數)。它穩定(重複元素相對順序不變),內存佔用取決於數據範圍,適合重複元素多或範圍小的整數數據(如考試分數)。Python實現通過邊界處理、統計次數等完成排序,測試驗證對含重複元素及負數數組的適用性。

閱讀全文
使用Java實現基數排序算法

基數排序是一種非比較型整數排序算法,通過按數位從低位到高位處理數字,將每個數字按當前數位分配到“桶”中,再按桶順序收集回原數組,重複直至所有數位處理完畢,適合位數少的整數,效率較高。基本思想是“分配-收集-重複”:按當前數位(個位、十位等)分配到對應桶,按桶順序收集回數組,循環處理所有數位。 以數組[5,3,8,12,23,100]爲例,經個位、十位、百位三輪處理完成排序。Java代碼中,通過找到最大數確定最高數位,用`(num / radix) % 10`獲取當前位,以ArrayList爲桶實現分配收集。時間複雜度O(d(n+k))(d爲最大數位數,k=10),空間O(n+k)。該算法穩定,適合整數排序,負數可分離正負後分別排序再合併。

閱讀全文
使用Java實現桶排序算法

桶排序是一種非比較型排序算法,核心是將數據分配到若干“桶”中,桶內局部排序後合併,適用於數據分佈均勻、範圍不大的場景(如整數且範圍可控)。步驟爲確定桶數量與範圍(如整數範圍0到max,桶數max+1),創建對應桶容器,遍歷元素分配到對應桶,桶內排序(如用插入排序或內置方法),最後按桶順序合併元素。時間複雜度理想下爲O(n),空間複雜度O(n)。優點是均勻分佈時高效,缺點是數據範圍大時空間浪費,分佈不均時效率下降。

閱讀全文