百度百科解释
通过不断的走访需要排序的元素,依次比较两个相邻的元素。如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。这样重复的进行直到没有相邻元素需要交换,就算元素排序完成。名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序
。
-
oc版本如下
#pragma mark - 冒泡排序
- (void)bubbleSortMethod{
int iCount = 0;//记录外层循环的次数
int jCount = 0;//记录内存循环交换的次数
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循环控制循环次数
iCount++;
for (int j = 0; j < arrCount - i; j++) { //内层for循环控制交换次数
jCount++;
if ([array[j] intValue] > [array[j + 1] intValue]) {
[array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
}
[self showBubbleSortResult:array];
}
}
NSLog(@"循环次数:%d",iCount);
NSLog(@"共%d次比较",jCount);
}
//打印数组
- (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;//记录外层循环的次数
var jCount = 0;//记录内存循环交换的次数
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("外层次数:\(iCount)","交换次数:\(jCount)")
}
var nums = [10,1,2,9,7,19,5,3,8,13,17]
bubbleSortMethod(&nums)