十大排序演算法之氣泡排序

2021-10-02 22:01:23 字數 1602 閱讀 8960

氣泡排序是一種簡單的排序方法。

基本的演算法思想就是對要排序的一組資料進行一遍遍的遍歷,每次遍歷都對相鄰的元素進行比較且調整順序,直到這組資料沒有需要調整的地方,排序完成。

下面先用文字敘述一下該排序演算法(公升序):

1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個,從頭一直比到尾,這樣最終,隊尾的數字應該就是最大的數。

2.重複操作以上步驟,除了最後乙個數

3.每次都會比上次的遍歷長度短,直到不需要遍歷

老規矩,文字看不懂,就看下面的**(c#實現):

//定義乙個整型陣列

int[

] arr01 =

newint

;//定義乙個temp用以交換值

int temp;

//氣泡排序,i可以理解為需要遍歷的次數控制

for(

int i =

1; i < arr01.length; i++)}

}//列印看看是否正確

console.

writeline

("排序後的陣列為:");

for(

int i =

0; i < arr01.length; i++

)

好了,這就是氣泡排序的基本操作。我們可以看出需要頻繁的交換數值。

那麼,存在這樣一種情況,就是資料在第一次遍歷之後就已經排好了,可是我們的程式會一直執行arr01.length-1次。如何避免?

我們可以設定乙個標誌來進行判斷。

通過冒泡的原理,我們可以看出:資料的順序排好之後,如果繼續遍歷就不會發生資料交換了。那麼我們可以利用這一點。也就是說:當一輪遍歷沒有發生交換,說明資料的順序已經排好,沒有必要繼續進行下去。

下面給出優化**c#實現:

//定義乙個整型陣列

int[

] arr01 =

newint

;//定義乙個temp用以交換值

int temp;

//設定乙個標誌

bool flag;

//我們在設定乙個計數器,看看進行了幾次排序

int count =0;

//氣泡排序(優化)

for(

int i =

1; i < arr01.length; i++)}

//遍歷一次計數器加一

count++

;//新增乙個判斷,若flag為假,直接結束排序,否則繼續。if(

!flag)

}//列印看看是否正確

console.

writeline

("排序後的陣列為:");

for(

int i =

0; i < arr01.length; i++

) console.

writeline

("一共遍歷了次;本該遍歷次。"

, count, arr01.length -1)

;

下面這張圖可以看出減少了很多的運算。

好了,關於氣泡排序演算法就分享到這裡了。有疑問可以私聊博主。

點個關注,給個贊唄!

十大排序演算法之氣泡排序

整理下最近學習的演算法,也方便有需要的人檢視 簡單排序 插入排序 選擇排序 氣泡排序 必學 分治排序 快速排序 歸併排序 必學 分配排序 桶排序 基數排序 樹狀排序 堆排序 必學 其他 計數排序 必學 希爾排序 原理 通過比較相鄰的兩個元素的大小實現排序,如果後邊的元素大於前面的元素,那麼就交換元素...

十大排序演算法之氣泡排序1

氣泡排序是最簡單的排序演算法,通過比較相鄰的兩個數字,如果前面的比後面的大則交換位置,否則不變。因此外層迴圈需要n 1次,因為每次比較的是兩個數字,到倒數第二個則可以停止比較,這一次迴圈結束。同時外層每迴圈一次則有乙個數排序完成,因此內層迴圈n 1 i,i為外層的迴圈數,如下。def bsort a...

python十大排序演算法 氣泡排序

演算法描述 是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。演算法步驟 比較相鄰的元素。如果第...