排序(1) 氣泡排序

2021-10-09 17:11:31 字數 1780 閱讀 7426

排序演算法是經久不衰的經典入門演算法,一般認為是,給定一組數,給出從小到大排序的結果。

主要演算法有:選擇,插入,冒泡,歸併,希爾,基數,快速,桶排序等等。每種排序有其自身的特性,適合不同的場景。分析排序演算法主要從3個方面:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。 持續每次對越來越少的元素

重複上面的步驟,直到沒有任何一對數字需要比較。

假設待排序數字是

第一趟排序:

1>

3? 否,繼續比較

3>

5?否,繼續比較

5>

2? 是,交換5,2 ,此時順序變為:

,繼續比較

5>

4? 是,交換5,4,此時順序變為:,比較到最後乙個元素了,進行下一趟排序。

第二趟排序:

也是從第乙個元素開始,但是這次由於最後乙個元素已經是最大的了,因此只比較到倒數第二個

完整的排序過程:1,

3,5,

2,4,

1,3,

2,5,

4,1,

2,3,

5,4,

1,2,

3,5,

4,

有兩種氣泡排序的實現,可以自己分別列印兩種實現的過程,看看第二種為什麼能夠優化排序的過程。

// 檔名:many_sort

#include

#include

using

namespace std;

void

show_arr

(int a,

int n)

cout << endl;

}//氣泡排序

//原始版本:小的浮到左邊,左側有序,由於i從0開始,每次都要重複比較有序部分,無法改進

void

bubble_sort0

(int a,

int n)

// show_arr(a, n); //可以列印每一次排序結果

} cout <<

__func__

<<

"比較次數:"

<< count1 <<

"交換次數:"

<< count2 << endl;

}//改進版本:大的浮到右邊,右側有序,從左側開始比較,可以提前結束。

void

bubble_sort1

(int

* a,

int n)

show_arr

(a, n)

;//可以列印每一次排序結果

} cout <<

__func__

<<

"比較次數:"

<< count1 <<

"交換次數:"

<< count2 << endl;

}//歸併排序

intmain()

;int n =10;

int b[5]

=;int nb =5;

bubble_sort1

(b, nb)

;//bubble_sort0(a, n);

//bubble_sort1(a, n);

//show_arr(a,n);

system

("pause");

return0;

}

排序 1 氣泡排序

目錄 1.什麼是氣泡排序 2.氣泡排序的關鍵點 3.氣泡排序應用 假設待排序列為9 6 4 2 7 8 5 3 1,要求是讓待排序列按遞增順序排列。氣泡排序就是對待排序列掃瞄一次,就可以使得最大的9就位。具體過程排序過程是 先9和6比較,比6大所以位置互換得到6 9 4 2 7 8 5 3 1,然後...

1 氣泡排序

氣泡排序 這裡採用公升序排序 是不斷比較臨近的兩個元素大小,若出現兩個元素為降序的 l i l i 1 則交換兩者的值。把最最小值冒泡至前面 根據判斷條件不同而不同 迴圈結束後,則是排序好的序列。我寫的程式是 每次都用前面的元素和後面的元素比較,若出現降序則交換。所以冒泡方式是,小的往前面移動。例如...

1 氣泡排序

基本思想 氣泡排序,類似於水中冒泡,較大的數沉下去,較小的數慢慢冒起來,假設從小到大,即為較大的數慢慢往後排,較小的數慢慢往前排。直觀表達,每一趟遍歷,將乙個最大的數移到序列末尾。1.比較相鄰的元素,如果前乙個比後乙個大,交換之。2.第一趟排序第1個和第2個一對,比較與交換,隨後第2個和第3個一對比...