資料結構與演算法 氣泡排序比拼插入排序

2022-09-16 02:57:10 字數 2341 閱讀 1780

說明:前幾節我們特意講了幾種重要的基本資料結構陣列,佇列,棧,鍊錶,以及基本的**實現,從現在起,我們來學習一下典型的排序演算法,只有不斷的努力,不斷的嘗試,我們的技術才能做到極致.

1>提出問題?什麼是氣泡排序?

氣泡排序:針對一系列資料,只會進行前後資料進行比較,在比較的同時,如果滿足大小關係不互換位置,如果不滿足大小關係,則2資料進行互換,根據這個原理,每次進行冒泡都會找到乙個大元素,比如第一次冒泡找到第一大元素,第2次冒泡找到底2大元素,經過n次冒泡, 

列子:用氣泡排序排序4,5,6,3,2,1從小到大進行排序.

解釋:上圖中是經過第一次氣泡排序的示意圖,通過圖中可以看出,,經過第一次氣泡排序就可以找到該序列的最大資料,為達到資料的有序性,必須經過6次的氣泡排序.結構圖如下所示.

關於氣泡排序還有另一種說法,那就是根據數學知識來進行計算,即有序度,滿有序度,逆有序度的關係進行計算

有序度滿足的關係是  a[i] <= a[j]  i逆有序度滿足的關係是  a[i] > a[j] i比如資料:4,5,6,3,2,1,即有序度的個數分布是(4,5),(4,6),(5,6)所以有序度是3,逆序度的個數是:(4,3)(4,2)(4,1),(5,3)(5,2)(5,1)(6,3)(6,2)(6,1)(3,2)(3,1)(2,1),即逆虛度=12

滿有序度則是資料在經過排序之後,滿足a[i] <=a[j]且i總結得出滿有序度= 有序度+逆序度,在進行氣泡排序的過程就是增加有序度的過程, 每交換一次資料,有序度就增加1,則該資料的氣泡排序交換資料的次數是15-3=12;即資料的交換次數=滿有序度-初始有序度.

2>應該怎樣分析氣泡排序的時間複雜度呢?

分析氣泡排序的時間複雜度我們應該從這幾個角度分析:最好,最壞,是否是穩定,是否是原地排序

氣泡排序在排序期間,只需要交換前後的資料,且只需要常量級的臨時空間,所以時間複雜度為o(1),所以氣泡排序是原地排序

氣泡排序在排序期間,如果前後資料相等,不需要做資料的交換,所以氣泡排序是穩定排序

氣泡排序在排序期間,如果資料是有序的,我們只需要經過一次氣泡排序資料就是有序的,所以在最好的情況下,時間複雜度為o(1),當資料完全無序,倒序的,這種情況下,我們需要進行n次冒泡,最壞情況下時間複雜度為o(n^2)

3>氣泡排序的的j**a**實現

public  class bubble

} if(!flag) break;

}}

4>插入排序

插入排序的思想是將已經存在的陣列分為2個區間,gre是什麼考試

乙個是已排序區間和未排序區間,初始的已排序區間是陣列中的第乙個數字,插入排序的核心思想是,在未排序的區間取出元素,和已經排序的區間的每乙個元素做資料比較,插入到已經排序區間的對應位置,直到未排序區間的資料為空為止.

我們用圖來解說下插入排序的思想;

解釋:插入排序也包含2種操作,一種是元素的比較,一種是元素的移動,當我們要將資料a插入到已經排序的區間,需要拿資料a與已經排序區間的資料一一比較,插入到合適的位置,插入入點需要騰出位置空間,a才可以插入,插入排序也可用有序度,逆虛度,滿有序度解釋,

5>插入排序的複雜度分析.

插入排序在排序區間,不需要額外的儲存空間,所以插入排序是原地排序

插入排序在排序區間,當2個資料相等時候,前後原有的位置不互換,所以插入排序是穩定排序,

當所需要排序的資料是有序的,需要將這些資料遍歷一遍,所以最好的情況下,插入排序的時間複雜度為o(n),

當排序的資料是完全無序,每次想當與需要將插入的資料插入到已經排序區間的第乙個位置,需要大量的資料移動,所以插入排序最壞情況下,時間複雜度為o(n^2)

6>實現插入排序的j**a**.

public void insertsort(int a,int n)else

}a[j+1] = value;//插入資料

}}

總結:為什麼插入排序比氣泡排序更收到人們的歡呢?

2者的時間複雜度都是o(n^2),,且都是原地,穩定排序,不管怎麼優化,資料的交換次數總是等於原始資料的逆序度,插入排序不管怎麼優化,資料的移動次數總是等於原始資料的逆序度,這是因為在**實現中,氣泡排序需要3次的賦值操作,而插入排序僅僅只需要一次的賦值操作,而賦值操作也是需要一定時間的 ,所以一定資料量的前提下,插入時間的賦值時間遠遠小於氣泡排序的賦值時間,所以插入排序更受到歡迎....

資料結構與演算法 排序(冒泡 插入和選擇)

氣泡排序 插入排序 選擇排序 我們前面講過,演算法的記憶體消耗可以通過空間複雜度來衡量,排序演算法也不例外。不過,針對排序演算法的空間複雜度,我們還引入了乙個新的概念,原地排序 sorted in place 原地排序演算法,就是特指空間複雜度是 o 1 的排序演算法。我們今天講的三種排序演算法,都...

資料結構與演算法 排序 氣泡排序

兩兩相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此...

資料結構與演算法 排序 氣泡排序

今天來學一下十大排序 首先,我們先了解下各個排序的時間複雜度 冒泡 選擇 插入 歸併 快速 希爾 堆排序屬於比較排序 在這裡,我們預設排序是從小到大排序。乙個動態演示各種排序演算法的動畫 visualgo 如果相等的兩個元素,在排序前後的相對位置保持不變,那麼這個演算法是穩定的排序演算法。比如 5 ...