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

2021-10-24 23:40:55 字數 1501 閱讀 4814

氣泡排序

插入排序

選擇排序

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

僅僅用執行效率和記憶體消耗來衡量排序演算法的好壞是不夠的。針對排序演算法,我們還有乙個重要的度量指標,穩定性。這個概念是說,如果待排序的序列中存在值相等的元素,經過排序之後,相等元素之間原有的先後順序不變。

**實現

// 氣泡排序,a表示陣列,n表示陣列大小

public

void

bubblesort

(int

a,int n)}if

(!flag)

break

;// 沒有資料交換,提前退出

}}

演算法效能分析:

首先,我們將陣列中的資料分為兩個區間,已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間資料一直有序。重複這個過程,直到未排序區間中元素為空,演算法結束。

**實現

// 插入排序,a表示陣列,n表示陣列大小

public

void

insertionsort

(int

a,int n)

else

} a[j+1]

= value;

// 插入資料

}}

演算法效能分析:

選擇排序演算法的實現思路有點類似插入排序,也分已排序區間和未排序區間。但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾。

public

static

void

selectsort

(int

arr)}if

(min!=i)}}

//完成陣列兩元素間交換

public

static

void

swap

(int

arr,

int a,

int b)

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

說明 前幾節我們特意講了幾種重要的基本資料結構陣列,佇列,棧,鍊錶,以及基本的 實現,從現在起,我們來學習一下典型的排序演算法,只有不斷的努力,不斷的嘗試,我們的技術才能做到極致.1 提出問題?什麼是氣泡排序?氣泡排序 針對一系列資料,只會進行前後資料進行比較,在比較的同時,如果滿足大小關係不互換位...

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

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數 也就是第一波冒泡完成 針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。如下 publ...

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

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