文章參考:圖解冒泡排序及優(yōu)化
dart冒泡排序
void main(){
var list = [23,16,19,44,7,10,12,9,88];
for(var i = 0; i< list.length;i++){
//是否已經(jīng)有序的標(biāo)記传透,默認(rèn)有序
bool isSort = true;
for(var j=0;j<list.length-i-1;j++){
//升序排序>,降序排序<
if(list[j]>list[j+1]){
int temp = list[j];
list[j]=list[j+1];
list[j+1]= temp;
//發(fā)生元素交換瞒渠,序列仍是無序狀態(tài)
isSort = false;
}
if(isSort){
break;
}
}
}
for(var i in list){
print(i);
}
print("==================");
list.forEach((i)=>print(i));
}
冒泡排序:每次就是將相鄰的兩個數(shù)進(jìn)行比較,然后交換位置,每一輪(最外層for執(zhí)行一遍)之后都能夠?qū)⒆畲螅ㄗ钚瑞驱。┑臄?shù)字冒泡到了最右邊
image.png
在經(jīng)過第一輪交換后,最大的數(shù) 9 冒泡到了最右邊
image.png
到此為止浸间,所有元素都是有序的了恨憎,這就是冒泡排序的整體思路。
冒泡排序是一種穩(wěn)定排序验夯,值相等的元素并不會打亂原本的順序猖吴。由于該排序算法的每一輪都要遍歷所有元素,總共遍歷(元素數(shù)量-1)輪挥转,所以平均時間復(fù)雜度是O(n2)海蔽。