使用C++實現基數排序算法

基數排序是一種非比較型整數排序算法,採用最低有效位優先(LSD)方式,按數字每一位(個位、十位等)排序,無需比較元素大小。其核心思想是通過穩定的計數排序處理每一位,確保低位排序結果在高位排序中保持有序。 實現步驟:1. 找出數組最大數,確定需處理的最高位數;2. 從低位到高位,對每一位用計數排序處理:統計當前位數字頻次,計算位置,從後往前穩定放置元素,最後複製回原數組。 C++代碼中,`countingSort`輔助函數實現按位排序(統計頻次、計算位置、穩定放置),`radixSort`主函數循環處理每一位。時間複雜度爲O(d×(n+k))(d爲最大位數,n爲數組長度,k=10),適用於整數範圍較大的場景。其核心是利用計數排序的穩定性,確保低位排序結果在高位排序中不被破壞。測試結果顯示排序後數組有序,驗證了算法有效性。

閱讀全文
使用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)。 **適用場景**:非負整數且範圍小,需高效排序;負數可通過偏移量轉換(如加最小值)處理。 計數排序通過“計數-構建”邏輯實現線性時間排序,是處理小範圍整數

閱讀全文
使用C++實現選擇排序算法

選擇排序是簡單直觀的排序算法,核心思想是每次從待排序元素中選出最小(或最大)元素,將其放入已排序序列末尾,直至完成排序。基本思路分四步:外層循環控制當前待排序起始位置,內層循環在剩餘元素中尋找最小值,交換操作將最小值移至當前起始位置,重複直至所有元素排序完成。 以數組{64,25,12,22,11}爲例,演示過程:i=0時找到最小值11交換到首位,i=1找到12交換到第二位,i=2找到22交換到第三位,i=3無需交換,最終數組排序完成。 C++代碼通過兩層循環實現:外層循環控制位置i,內層循環找最小值索引minIndex,交換arr[i]與arr[minIndex]。時間複雜度O(n²),空間複雜度O(1)。 選擇排序實現簡單、無需額外空間,適合小規模數據排序,是理解排序算法的基礎。

閱讀全文
使用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)`,不穩定。希爾排序通過分組優化插入排序,適用於較大數組,核心邏輯爲“分組→排序→縮小增量→最終排序”。

閱讀全文
使用C++實現插入排序算法

插入排序是簡單直觀的排序算法,核心思想是將元素逐個插入到已排序子數組的合適位置(類似整理撲克牌)。基本思路:從第二個元素開始,取當前元素,與前面已排序元素比較,若前面元素更大則後移,直到找到插入位置,插入後繼續處理下一個元素。 實現時,外層循環遍歷元素,內層循環用臨時變量保存當前元素,通過比較移動前面元素騰出位置,最後插入。時間複雜度最壞O(n²),最好O(n),空間複雜度O(1)。適用於小規模數據或基本有序數據,優點是穩定、簡單,是理解複雜排序的基礎。

閱讀全文