冒泡演算法是一種基礎的排序演算法,這種演算法會重複的比較陣列中相鄰的兩個元素,如果乙個元素比另乙個元素大/小,那麼就交換這兩個元素的位置。重複一直比較到最後乙個元素.
1.基本的氣泡排序演算法:
-(void)bubblesorting}}
nslog(@"排序後的陣列===%@",array);
nslog(@"迴圈次數%d",count);
}//執行結果
2021-03-04 16:04:22.999082+0800 test[15616:230187] 排序之前的陣列===(
3,2,
9,1,
6,7,
4,5,
8)2021-03-04 16:04:22.999237+0800 test[15616:230187] 排序後的陣列===(
1,2,
3,4,
5,6,
7,8,
9)2021-03-04 16:04:22.999307+0800 test[15616:230187] 迴圈次數64
這樣寫的氣泡排序需要比對(陣列的個數-1)的平方次,每一圈內迴圈都把最大的數換到最後,如上:第一圈9被替換到最後乙個元素位置,第二圈8被替換到倒數第二個元素的位置,那麼8和9還需要比對麼,答案是否定的,所以可以對上述方法進行第一次優化
2.第一次優化
-(void)bubblesorting1}}
nslog(@"排序後的陣列===%@",array);
nslog(@"迴圈次數%d",count);
}//執行結果
2021-03-04 16:26:09.737658+0800 test[16483:244359] 排序後的陣列===(
1,2,
3,4,
5,6,
7,8,
9)2021-03-04 16:26:09.737712+0800 test[16483:244359] 迴圈次數36
可以看到優化後只需要迴圈36次,為什麼呢?因為每一圈內迴圈最後兩個數都不用比較,所以每一圈內迴圈次數都相對上一輪少1,所以總的比對次數為1+2+..+(陣列的個數-1)。那麼,是否還可以繼續優化,答案是可以的,那就是當迴圈結束前,陣列已經排好順序了,那麼後面的比較就沒有必要了,可以跳出迴圈。
2.第二次優化
-(void)bubblesorting2
}if (!isend)
}nslog(@"排序後的陣列===%@",array);
nslog(@"迴圈次數%d",count);
}//執行結果
2021-03-04 16:38:08.899639+0800 test[16965:252277] 排序後的陣列===(
1,2,
3,4,
5,6,
7,8,
9)2021-03-04 16:38:08.899709+0800 test[16965:252277] 迴圈次數26
當然這個數值是不是固定的,是小於等於第一次優化後的迴圈次數的。 ios演算法之氣泡排序演算法
通過不斷的走訪需要排序的元素,依次比較兩個相鄰的元素。如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。這樣重複的進行直到沒有相鄰元素需要交換,就算元素排序完成。名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端 公升序或降序排列 就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,...
java常用演算法之氣泡排序
氣泡排序的思想 陣列中的相鄰元素進行比較,若發現發現跟比較策略相同那麼交換兩者的位置,最後最大或者最小的元素會被放在陣列的最後面。氣泡排序的實現方式 首先確定遍歷次數,之後從陣列元素的首位元素開始跟相鄰的元素進行比較。實現 氣泡排序 思想 從第乙個位置開始 讓相鄰的元素比較大小並且交換 每一趟都會將...
iOS學習筆記 iOS演算法 四 之氣泡排序
氣泡排序法的基本思想 以公升序為例 含有n個元素的陣列原則上要進行n 1次排序。對於每一躺的排序,從第乙個數開始,依次比較前乙個數與後乙個數的大小。如果前乙個數比後乙個數大,則進行交換。這樣一輪過後,最大的數將會出現稱為最末位的陣列元素。第二輪則去掉最後乙個數,對前n 1個數再按照上面的步驟找出最大...