排序演算法 氣泡排序

2021-10-01 02:34:59 字數 1180 閱讀 3483

氣泡排序(bubble sort),又被稱為氣泡排序或者泡沫排序。

它是一種較簡單地排序演算法。它會遍歷若干次要排序地數列,每次遍歷時,它都會從前往後依次地比較相鄰兩個數的大小;如果前者比後者大,則交換它們的位置。這樣,一次遍歷之後,最大的元素就在數列的末尾!採用的相同的方法再次遍歷時,第二大的元素就被排列在最大元素之前。重複此操作,直到整個數列都有序為止!

1.氣泡排序**說明

1.1氣泡排序c實現一

void bubble_sort(int a,int n)}}

下面以數列為例,演示它的氣泡排序過程(如下圖)

我們先分析第1趟排序

當i=5,j=0時,a[0]當i=5,j=1時,a[1]當i=5,j=2時,a[2]當i=5,j=3時,a[3]當i=5,j=4時,a[4]於是,第1趟排序完之後,數列變成了。此時,數列末尾的值最大。

根據這種方法:

第2趟排序完之後,數列中a[5...6]是有序的。

第3趟排序完之後,數列中a[4...6]是有序的。

第4趟排序完之後,數列中a[3...6]是有序的。

第5趟排序完之後,數列中a[1...6]是有序的。

第5趟排序之後,整個數列也就是有序的了

1.2氣泡排序c實現二

觀察上面氣泡排序的流程圖,第3趟排序之後,資料已經是有序得了;第4趟和第5趟並沒有進行資料交換。下面我們對氣泡排序進行優化,使它效率更高一些;新增乙個標記,如果一趟遍歷中發生了交換,則標記為true,否則為false。如果某一趟沒有發生交換,說明排序已經完成!

void bubble_sort2(int a,int n)

}if(flag == 0)

break;//若沒發生交換,則說明數列已有序}}

2.氣泡排序的時間複雜度和穩定性

2.1氣泡排序時間複雜度

氣泡排序的時間複雜度是o(n^2)

假設被排序的數列中有n個數。遍歷一趟的時間複雜度是o(n),需要遍歷多少次呢?

n-1次!因此,氣泡排序的時間複雜度是o(n^2)

2.2氣泡排序穩定性

氣泡排序是穩定的演算法,它滿足穩定演算法的定義

演算法穩定性--假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!

排序演算法 氣泡排序

一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...

排序演算法 氣泡排序

從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...

排序演算法 氣泡排序

排序演算法是處理資料最基礎的演算法,掌握各種排序演算法有利以後遇到資料時的處理。首次學習,先學習氣泡排序。氣泡排序原理 對一組待排序資料x1,x2,x3,x4,x5,x6,x7.xn,氣泡排序演算法指標 這裡的指標並不是實際的指標,只是為方便而假象的乙個類似指標的東西 從第乙個資料開始,與其後面的乙...