百度百科解釋
通過(guò)不斷的走訪需要排序的元素起惕,依次比較兩個(gè)相鄰的元素。如果順序(如從大到小、首字母從Z到A)錯(cuò)誤就把他們交換過(guò)來(lái)跛锌。這樣重復(fù)的進(jìn)行直到?jīng)]有相鄰元素需要交換辐脖,就算元素排序完成。名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端(升序或降序排列)筐带,就如同碳酸飲料中二氧化碳的氣泡最終會(huì)上浮到頂端一樣彪薛,故名冒泡排序
。
-
oc版本如下
#pragma mark - 冒泡排序
- (void)bubbleSortMethod{
int iCount = 0;//記錄外層循環(huán)的次數(shù)
int jCount = 0;//記錄內(nèi)存循環(huán)交換的次數(shù)
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@10,@1,@2,@9,@7,@19,@5,@3,@8,@13,@17]];
NSInteger arrCount = array.count - 1;
for (int i = 0; i < arrCount; i++) {//外層for循環(huán)控制循環(huán)次數(shù)
iCount++;
for (int j = 0; j < arrCount - i; j++) { //內(nèi)層for循環(huán)控制交換次數(shù)
jCount++;
if ([array[j] intValue] > [array[j + 1] intValue]) {
[array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
}
[self showBubbleSortResult:array];
}
}
NSLog(@"循環(huán)次數(shù):%d",iCount);
NSLog(@"共%d次比較",jCount);
}
//打印數(shù)組
- (void)showBubbleSortResult:(NSMutableArray * )array {
NSString * str = @"";
for (NSNumber * value in array) {
str = [str stringByAppendingString:[NSString stringWithFormat:@"%zd ",[value integerValue]]];
}
NSLog(@"%@",str);
NSLog(@"<=============>");
}
-
swift版本如下
/// Mark - 冒泡算法
func bubbleSortMethod(_ nums: inout [Int]) {
var iCount = 0;//記錄外層循環(huán)的次數(shù)
var jCount = 0;//記錄內(nèi)存循環(huán)交換的次數(shù)
let n = nums.count
for i in 0..<n {
iCount += 1
for j in 0..<(n - 1 - i) {
jCount += 1
if nums[j] > nums[j + 1] {
nums.swapAt(j, j + 1)
print(nums)
print("============")
}
}
}
print("外層次數(shù):\(iCount)","交換次數(shù):\(jCount)")
}
var nums = [10,1,2,9,7,19,5,3,8,13,17]
bubbleSortMethod(&nums)