使用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²),適用於小規模數據。該算法邏輯簡單、代碼易實現,是理解排序基礎思想的典型示例。
閱讀全文撲克牌排序啓示:插入排序的生活類比與實現
這篇文章介紹了插入排序算法。核心思想是逐步構建有序序列:默認首個元素已排序,從第二個元素起,將每個元素(待插入元素)插入到前面已排序序列的正確位置(需移動較大元素騰出空間)。以數組`[5,3,8,4,2]`爲例,演示了從後往前比較、移動元素的過程,關鍵步驟爲:遍歷數組,暫存待插入元素,移動已排序元素,插入位置。 算法特點:優點是簡單直觀、原地排序(空間複雜度O(1))、穩定且適合小規模或近乎有序數據;缺點是最壞時間複雜度O(n²),移動操作較多。總結而言,插入排序是理解排序算法的基礎,通過生活類比(如整理撲克牌)幫助理解,適用於簡單場景或小規模數據排序。
閱讀全文排序算法的‘速度密碼’:時間複雜度與冒泡排序
這篇文章圍繞排序算法的“速度密碼”展開,核心是時間複雜度與冒泡排序。時間複雜度用大O表示法衡量,常見類型有O(n)(線性,隨數據量線性增長)、O(n²)(平方,數據量大時效率極低)、O(log n)(對數,速度極快),其是判斷算法快慢的關鍵。 冒泡排序作爲基礎算法,原理是通過相鄰元素比較交換,將小元素“上浮”、大元素“下沉”。以數組[5,3,8,4,2]爲例,重複遍歷比較相鄰元素,直至完成排序。其時間複雜度爲O(n²),空間複雜度O(1)(原地排序),優點是簡單易懂、邏輯直觀,缺點是效率低,數據量大時耗時極久。 總結:冒泡排序雖慢(O(n²)),但作爲入門工具,能幫助理解排序思想與時間複雜度,爲學習快速排序等高效算法(優化至O(n log n))奠定基礎。
閱讀全文二分查找:比線性查找快多少?數據結構中的查找技巧
文章介紹了計算機中的查找算法,從線性查找和二分查找兩方面展開。線性查找(順序查找)是基礎方法,通過從頭到尾逐個檢查數據,時間複雜度爲O(n),適用於數據量小或無序的場景,最壞情況需遍歷全部數據。二分查找則需在有序數組中使用,核心是每次排除一半數據,時間複雜度O(log n),數據量大時效率遠超線性查找(如n=100萬,二分僅需20次,線性需100萬次)。兩者適用場景不同:二分適用於有序、大數據量且頻繁查找的場景;線性適用於無序、小數據量或動態變化的數據。總結:二分查找通過“對半排除”大幅提升效率,是大數據量有序數據的高效選擇,而線性查找在小數據量或無序場景更靈活。
閱讀全文哈希表怎麼存數據?哈希函數讓查找變簡單
文章用找書類比引出問題:順序查找數據(如數組)效率低,哈希表是高效存儲工具。哈希表核心是哈希函數,將數據映射到“桶”(數組位置),實現快速存取。哈希函數把數據轉爲哈希值(桶編號),如學號取後兩位得哈希值。存儲時,先算哈希值定位桶,若多數據哈希值相同(衝突),用鏈表法(桶內掛鏈表)或開放尋址法(找下一個空桶)解決。查找時,直接算哈希值定位桶,再在桶內查找,無需遍歷全部數據,速度極快。哈希表應用廣泛(如通訊錄、緩存),核心是用哈希函數將查找從“翻遍”轉爲“直達”。
閱讀全文