排序:通過比較來決定元素間的相對次序,由於其時間復雜度不能突破O(nlogn),因此也稱為非線性時間比 ...
冒泡排序,不管序列是怎樣,都是要比較n n 次的,最好 最壞 平均時間復雜度都為O n ,需要一個臨時變量用來交換數組內數據位置,所以空間復雜度為O 。 優化:使用一個標志位來判斷是否有序,若果有序,那么循環一次就直接退出,時間復雜度為O n 。 選擇排序是冒泡排序的改進,同樣選擇排序無論序列是怎樣的都是要比較n n 次的,最好 最壞 平均時間復雜度也都為O n ,需要一個臨時變量用來交換數組內 ...
2019-08-09 21:42 0 759 推薦指數:
排序:通過比較來決定元素間的相對次序,由於其時間復雜度不能突破O(nlogn),因此也稱為非線性時間比 ...
本文主要描述3個時間復雜度為n2的排序算法:冒泡排序、選擇排序、插入排序。 1.冒泡排序:由數組頭部開始,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。每次交換完成后,當前數組最大值就會被放在最后。 傳入參數:a為待排序數組,n為數組長度。 第一個for循環 ...
本文講述時間復雜度為n*logn的排序算法:歸並排序、快速排序、堆排序以及希爾排序的原理、Java實現以及變形應用。 一、歸並排序 原理:把兩個有序數列合並為一個有序數列。需遞歸實現。 Java實現: 二、快速排序 原理:每一次將一個數放在一個左邊 ...
一、動圖演示 二、思路分析 1. 第一個跟后面的所有數相比,如果小於(或小於)第一個數的時候,暫存較小數的下標,第一趟結束后,將第一個數,與暫存的那個最小數進行交換,第一個數就是 ...
一、動圖演示 二、思路分析 先來了解下堆的相關概念:堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩 ...
一、動圖演示 二、思路分析 例如從小到大排序: 1. 從第二位開始遍歷, 2. 當前數(第一趟是第二位數)與前面的數依次比較,如果前面的數大於當前數,則將這個數放在當前數的位置上,當前數的下標-1, 3. 重復以上步驟,直到當前數不大於前面的某一個數為止 ...
一、動圖演示 二、思路分析 歸並排序就是遞歸得將原始數組遞歸對半分隔,直到不能再分(只剩下一個元素)后,開始從最小的數組向上歸並排序 1. 向上歸並排序的時候,需要一個暫存數組用來排序, 2. 將待合並的兩個數組,從第一位開始比較,小的放到暫存數組,指針向后移, 3. ...
一、動圖演 二、思路分析 基數排序第i趟將待排數組里的每個數的i位數放到tempj(j=1-10)隊列中,然后再從這十個隊列中取出數據,重新放到原數組里,直到i大於待排數的最大位數。 1.數組里的數最大位數是n位,就需要排n趟,例如數組里最大的數是3位數,則需要排3趟。 2. ...