演算法基礎 氣泡排序,選擇排序和插入排序

2021-08-25 19:36:00 字數 1738 閱讀 8683

從a[index=0]開始比較a[0]和a[1],按照程式給定判斷是否交換位置,然後a[1]和a[2]比較,一直到a[max]。此時a[max]一定是要求的最大或者最小,下一次迴圈不需要再比較,所以length-i。

5,4,3,2,1

第一次:   4,3,2,1,5

第二次:      3,2,1,4,5

第三次:    2,1,3,4,5

第四次:      1,2,3,4,5

public static void main(string args) ;

for (int i = 0; i < a.length; i++) }}

for (int i = 0; i < a.length; i++)

}

比較次數:(n-1)+(n-2)+(n-3)+(n-4)+...+1=(n-1)*n/2

交換次數:約為n^2/4

由於常數不算在大o表示法,可以忽略2和4,並且認為氣泡排序與逆行需要o(n^2)時間級別

無論何時,發現乙個迴圈巢狀乙個迴圈(如氣泡排序),都可以懷疑執行時間為o(n^2)級。外層循壞執行n次,內層迴圈執行n次或者遞減n次或者幾分之n次,以為這大約執行n^2次基本操作,都可以視為o(n^2)級

對氣泡排序進行了改進,雖然讓交換次數降低到n次,但是比較次數依舊是o(n^2)。改變了引用位置,實際物件的位置並沒有發生改變。

取出第乙個數a[0]假設最小,與後面所有的數依次比較,根據**判斷是否交換,交換(角標)則改變了(角標)重新宣告了此時的最小或最大數,並沒有改變量字的位置,直到完成內層迴圈,將此時的最大或者最小和外層迴圈假定最大或者最小交換位置。因為完成一次迴圈以後已經確定最前為最大或最小值,不需要在進入排序,所以內層迴圈為int j=i+1;   

public static void main(string args) ;

for (int i = 0; i < a.length; i++)

}int b = a[temp];

a[temp] = a[i];

a[i] = b;

} for (int i = 0; i < a.length; i++)

}

雖然選擇排序和氣泡排序都需要進行o(n^2)次比較,但選擇排序只需要交換n次。

對於 10 個資料項,需要 45 次比較。然而,10 個資料項只需要少於 10次交換。對於 100 個資料項,需要 4950 次比較,但只進行了不到 100 次的交換。n 值很大時,比較的次數是主要的,所以結論是選擇排序和氣泡排序一樣執行了 o(n2)時間。但是,選擇排序無疑更快,因為它進行的交換少得多。當 n 值較小時,特別是如果交換的時間級比比較的時間級大得多時,選擇排序實際上是相當快的。

插入排序雖然比氣泡排序和選擇排序更快,但是依舊是0(n^2)級。

將資料插入到陣列中,和前面的比較,根據**判斷交換位置。往前比較時條件為(j>0)。

public static void main(string args) ;

int b;

for(int i = 1;i0;j--) {

if(a[j]在第一次排序中最多比較一次,第二次排序中最多比較兩次,因此比較次數最多為1+2+...+(n-1)=n*(n-1)/2次。但是在在每次發現從插入點之前,平均只比較了一半的數,總共n*(n-1)/4次。所以當資料基本有序的時候,插入排幾乎只需要o(n)的時間。

然而,對於逆序的資料排序,每次移動和比較都會執行,所以不比氣泡排序快。

基礎演算法 氣泡排序,插入排序,選擇排序

本文來在極客時間 王爭老師的 資料結構與演算法之美 每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關係要求。如果不滿足就讓它倆互換。一次冒泡會讓至少乙個元素移動到它應該在的位置,重複 n 次,就完成了 n 個資料的排序工作。例如 要對一組資料 4,5,6,3,2,1,從小到大進行排序。第一...

基礎排序(選擇 插入 冒泡)

一 選擇排序 1.最初版本 2.優化 二 插入排序 三 氣泡排序 1.最初版本 2.優化 四 實驗對比綜合對比 排序演算法 時間複雜度 一般情況下 最壞情況下 最好情況下 空間複雜度 穩定性選擇排序 o n 2 o n 2 o n 2 o 1 不穩定插入排序 o n 2 o n 2 o n o 1 ...

演算法 選擇 插入 氣泡排序

選擇排序,就是每次選擇未排序中最小的,放到第i個位置。比如第一次,遍歷整個陣列,找到陣列中最小的,放到第乙個位置 第二次從第2個元素開始遍歷,找到最小的,放到第2個位置 以此類推,流程如下。輸出結果 012 3568 9插入排序,第一次迴圈,當做0 0號位置已經排好序,需要做的是從0 1號位置排序,...