使用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++實現希爾排序算法
希爾排序是插入排序的改進版,又稱“縮小增量排序”,通過分組插入排序並逐步縮小增量實現高效排序。基本思路:選定初始增量`gap`(如數組長度的一半),按`gap`分組(子序列元素間隔`gap`),對各組子序列插入排序;重複縮小`gap`(通常減半),直至`gap=1`完成整體排序。 核心原理:大`gap`時分組減少移動次數,小`gap`時數組已部分有序,大幅降低最終插入排序的移動量。以數組`[12,34,54,2,3]`爲例,初始`gap=2`分組排序後數組漸趨有序,再`gap=1`完成最終排序。 代碼通過三層循環實現:外層控制`gap`,中層遍歷分組,內層移動元素。時間複雜度平均`O(n^1.3)`(依賴增量),最壞`O(n²)`,空間複雜度`O(1)`,不穩定。希爾排序通過分組優化插入排序,適用於較大數組,核心邏輯爲“分組→排序→縮小增量→最終排序”。
閱讀全文使用Java實現選擇排序算法
選擇排序是一種簡單直觀的排序算法,核心思想是每次從無序部分選取最小(或最大)元素,放入已排序部分末尾,重複此過程直至全部有序。其基本思路爲:外層循環確定已排序部分的末尾位置,內層循環在未排序部分中尋找最小值,交換該最小值與外層循環當前位置的元素,直至完成排序。 Java實現中,`selectionSort`方法通過兩層循環實現:外層循環遍歷數組(`i`從0到`n-2`),內層循環(`j`從`i+1`到`n-1`)尋找未排序部分的最小值索引`minIndex`,最後交換`i`位置元素與`minIndex`位置元素。以數組`{64,25,12,22,11}`爲例,每輪交換後逐步構建有序數組,最終結果爲`[11,12,22,25,64]`。 時間複雜度爲O(n²),適用於小規模數據。該算法邏輯簡單、代碼易實現,是理解排序基礎思想的典型示例。
閱讀全文