Day7 排序 插入排序和氣泡排序

2021-10-01 06:31:00 字數 1583 閱讀 3766

常用的排序:

氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序

冒泡、插入、選擇

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...