氣泡排序是一種簡單的排序方法。
基本的演算法思想就是對要排序的一組資料進行一遍遍的遍歷,每次遍歷都對相鄰的元素進行比較且調整順序,直到這組資料沒有需要調整的地方,排序完成。
下面先用文字敘述一下該排序演算法(公升序):
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十大排序演算法 氣泡排序
演算法描述 是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。演算法步驟 比較相鄰的元素。如果第...