氣泡排序演算法 C語言實現及針對性優化詳解

2021-10-22 21:26:01 字數 3428 閱讀 9875

三、針對問題進行優化

總結氣泡排序的原理是:

從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的乙個或最小的乙個。這個數就會從序列的最右邊冒出來。

以下是本篇文章正文內容

氣泡排序,是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。 函式如下(示例):

for

(i=0

; i1; i++

)/* 外迴圈為排序趟數,len個數進行len-1趟 */

for(j=

0; j

1-i; j++

)}

從頭開始比較相鄰的兩個元素,如果有乙個的元素比相鄰的元素的大(小),就交換兩個元素的位置。

注:這些可以根據寫程式的人的意願來調整

往前對每個相鄰的元素都做這樣的比較、交換操作,這樣到陣列頭部時,第 1 個元素會成為最大的元素。

重新開始第 1、2 步的操作,除了在這之前頭部已經排好的元素。

繼續對越來越少的資料進行比較、交換操作,直到沒有可比較的(即沒有逆序的)資料為止,排序完成。

程式如下(示例):

#include

#define arr_len 255

/*陣列長度上限*/

#define elemtype int

/*元素型別*/

/* 氣泡排序 */

/* 1. 從當前元素起,向後依次比較每一對相鄰元素,若逆序則交換 */

/* 2. 對所有元素均重複以上步驟,直至最後乙個元素 */

/* elemtype arr: 排序目標陣列 int len: 元素個數 */

void bubblesort (elemtype arr,

int len)}}

int main (

void);

int len =10;

int i;

bubblesort (arr, len)

;for

(i=0

; i) printf (

"%d\t"

, arr[i]);

putchar (

'\n');

return0;

}

資料的順序排好之後,冒泡演算法仍然會繼續進行下一輪的比較,直到arr.length-1次,後面的比較沒有意義的。

新增變數鑰匙key。

如果發生了交換,key設定為true;如果沒有交換就設定為false。

這樣當一輪比較結束後如果key仍為false,即:這一輪沒有發生交換,這就說明資料的順序已經排好,沒有必要繼續進行下去。

c語言沒有布林值(true值和false值)

c語言中表示真假的值是0和1,我們可以利用預定**決。

true可以用1替代

false可以用0替代

#define true 1 

/*將true的值定義為1,即為真*/

#define false 0

/*將false的值定義為0,即為假*/

#include

#define arr_len 255

/*陣列長度上限*/

#define elemtype int

/*元素型別*/

#define bool short

/*將bool定義為short關鍵字,便於區分*/

#define true 1

/*將true的值定義為1,即為真*/

#define false 0

/*將false的值定義為0,即為假*/

/* 氣泡排序 */

/* 1. 從當前元素起,向後依次比較每一對相鄰元素,若逆序則交換 */

/* 2. 對所有元素均重複以上步驟,直至最後乙個元素 */

/* elemtype arr: 排序目標陣列 int len: 元素個數 */

void bubblesort (elemtype arr,

int len)}if

(false == key)

break

;/*判斷標誌位是否為false,如果為false,說明後面的元素已經有序,就果斷break*/}}

int main (

void);

int len =10;

int i;

bubblesort (arr, len)

;for

(i=0

; i) printf (

"%d\t"

, arr[i]);

putchar (

'\n');

return0;

}

注意看執行秒數

process exited after 0.6533 seconds with return value 0

請按任意鍵繼續. . .

請按任意鍵繼續. . .

次數優化前

優化後第一次

0.4732s

0.4641s

第二次0.4432s

0.453s

第三次0.582s

0.4395s

第四次……

……備註:這裡統計次數較少,而且只用了一組資料做實驗,結果可能不太嚴謹

有質疑的小夥伴可以自己多做幾次對比,最好可以使用不同的資料(但每一組要對應)進行實驗

氣泡排序是一種簡單的穩定的排序演算法。. 比較相鄰的兩個資料,如果資料之間滿足整體的要求(從小到大或者從大到小)則交換當前的兩個元素的值,直到整體有序。

我們可以考慮對起泡排序演算法的改進。具體的某乙個待排序元素序列可能不需要執行n - 1 次趟排序就能全部排好。為此 ,我們可以再演算法中加上乙個變數key ,用來標示本趟起泡結果是否發生了逆序交換 。如果沒有發生交換,則 false == key ,表示全部的元素都已經排好了,可以進行終止處理,否則繼續進行排序。

氣泡排序法在日常中並不會經常性使用,但其思維可以供我們學習。

氣泡排序演算法C語言實現

氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在...

排序演算法 氣泡排序 C語言實現

氣泡排序介紹 氣泡排序 bubble sort 又稱為氣泡排序。這是一種較簡單的排序演算法。它會遍歷若干次要排序的陣列,每次遍歷時,它都會從前往後依次比較相鄰兩個數的大小 如果前者大於後者,則兩者位置互換。由此,一次遍歷後,最大元素就在數列末尾。採用相同方法再次遍歷時,第二大的元素就被排列在最大元素...

經典排序演算法 氣泡排序(C語言實現)

氣泡排序是一種較為簡單的排序演算法,其基本思想為從頭開始依次比較相鄰的兩個元素大小,將較大 較小 的元素移至右端,最終使最大 最小 的元素移至序列最後,再次重複上述過程,直到最終序列完全有序為止。例如 有一行數分別是26 10,83,56,28,66,7 說明 按照從小到大的順序進行排序,方框數為比...