演算法 氣泡排序

2022-08-19 01:24:08 字數 1319 閱讀 4361

氣泡排序——又乙個無比經典的排序演算法。而這個演算法的名字由來是因為這個演算法會讓越大的元素會經過交換慢慢「浮」到數列的頂端,就如同氣泡一樣,大的會上浮到頂端,故名「氣泡排序」。

洛谷1177 排序

題目描述

將讀入的 n 個數從小到大排序後輸出。

輸入格式

第 1 行為乙個正整數 n。

第 2 行包含 n 個空格隔開的正整數 a[i],為你需要進行排序的數,資料保證了a[i]不超過10^9。

輸出格式

將給定的 n個數從小到大輸出,數之間用空格隔開。

輸入輸出樣例

輸入

5

4 2 4 5 1

輸出

1 2 4 4 5
說明提示

對於20% 的資料,有 n <= 10^3。

對於100% 的資料,有 n <=10^5 。

備註

本來洛谷1177是需要用快速排序來求解的,但實在找不到用氣泡排序就能過的裸題,因此只好以這道題為例子了。這道題用氣泡排序實際上只能拿20分,因為氣泡排序效率較低。

氣泡排序其實跟選擇排序比較相似,選擇排序是每次找i ~ n中最小的放到第i位,而氣泡排序是每次找1 ~ (n - i + 1)中最大的放到第(n - i + 1)位,只不過找的方式不太一樣。

先列舉i從1到n,表示這是第i次迴圈,之後每次考慮序列中從1到(n - i + 1)這些元素構成的序列,比較這個序列兩兩相鄰的元素,如果第乙個比第二個大,即a[j] > a[j + 1],就交換這兩個元素,使第乙個小於第二個。

這樣每次迴圈,就可以把1 ~ (n - i + 1)最大的元素放到第(n - i + 1)位了,因為這之中最大的元素會不停的往後移動,直到第(n - i + 1)位。這裡可能相對來說比較難理解,你可以自己動手去分析一下樣例。

最後算一下這個演算法的時間複雜度:我們需要先列舉i,再去列舉j,兩重迴圈,所以時間複雜度是o(n^2)級別的。相對於選擇排序,效率沒怎麼提高。

# include # include # include # include using namespace std;

const int n_max = 100000;

int n;

int a[n_max + 10];

void bubblesort()

int main()

氣泡排序演算法 C 氣泡排序演算法排序詳解

氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

排序演算法 氣泡排序

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