常用的排序:
氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序
冒泡、插入、選擇
o(n^2)
基於比較
快排、歸併
o(nlogn)
基於比較
桶、計數、基數
o(n)
如何分析乙個排序演算法?
排序演算法的執行效率
a. 最好情況、最壞情況和平均情況的時間複雜度
b. 時間複雜度的係數、常數、低階
c. 比較次數和交換次數
排序演算法的記憶體消耗
排序演算法的穩定性
氣泡排序
氣泡排序示例:
public void bubblesort(int arr, int n)
} if (!flag)
}}
三問:
氣泡排序是原地排序演算法嗎?
是,因為只需要常量級的臨時空間,空間複雜度為o(1)
冒泡是穩定的排序演算法嗎?
為了保證穩定排序,所以在比較的時候,當==的時候,不交換位置
氣泡排序的時間複雜度?
最好 o(n) 最壞o(n^2)
平均o(n^2)利用有序度和逆序度進行計算
插入排序
示例**:
public void insertsort(int arr, int n) else
} a[j+1] = value;
}}
三問:
插入排序是原地排序演算法嗎?
是,因為只需要常量級的臨時空間,空間複雜度為o(1)
插入是穩定的排序演算法嗎?
是插入排序的時間複雜度?
最好 o(n) 最壞o(n^2)
平均o(n^2)
選擇排序
選擇排序空間複雜度為 o(1),是一種原地排序演算法。選擇排序的最好情況時間複雜度、最壞情況和平均情況時間複雜度都為 o(n^2),並且不是穩定的排序。
示例**:
public void sort(int arr)
}// 一輪比較之後,如果最小值的索引不等於當前的索引值的話,說明要交換位置
if (index != i) }}
02 排序 插入排序
基本原理 直接插入法思想 1.在原始資料中,將第乙個資料作為已排序的資料序列 2.從陣列中獲取下乙個元素,在已經排序好的元素中從後向前掃瞄,並判斷該元素與已排列好的的大小 3.若排序序列的元素大於新元素,則將該元素移到下一位置 4.重複步驟三,直到找到已排序的元素小於或者等於行元素的位置 5.將新元...
氣泡排序,插入排序
前提 void x sort elementtype a,int n 大多數情況下,為簡單起見,討論從小大的整數排序 n是正整數 只討論基於比較的排序 有定義 只討論內部排序 穩定性 任意兩個相等的資料,排序前後的相對位置不發生改變 沒有一種排序是任何情況下 都表現最好的 氣泡排序 void bub...
氣泡排序 插入排序
學習思路 思路講解 實現 1 通過雙重迴圈,相鄰兩個資料做對比,通過位置交換使其變得有序 2 時間複雜度 分析 解釋 外部迴圈從0開始i 內部迴圈從0開始j,完整迴圈後會將本次最大值放入陣列最後,下次迴圈可忽略相應的尾部資料 length i 1 重複1 2步即可完成排序 實現 public cla...