冒泡排序的核心思路
- 整个冒泡排序过程中包含多次冒泡操作。每一次冒泡操作都会遍历整个数组,依次对数组中相邻的元素进行比较,看是否满足大小关系要求,如果不满足,就将它们互换位置。一次冒泡操作会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。
冒泡排序的操作流程。
- 假设要对一个数组a[6]从小到大顺序进行排序。第一步操作,先比较a[0]和a[1]的大小,如果a[0]>a[1],则将a[0]和a[1]交换位置,如果a[0]<a[1],则不交换位置。完成这一步操作后,再对a[1]和a[2]进行比较,操作原则同上。一直比较到最后,则a[5]就是这个数组中的最大值,已经在数组的末尾了。
- 第二步操作再次进行a[0]和a[1]的比较,一直比较到a[4],就把数组的第二大的元素放在了a[4]的位置了。
- 按照这样的原则,依次重复操作,比较到只剩a[0]的时候,就排好序了。
冒泡排序的相关
- 冒泡排序是原地排序算法,是稳定排序算法。
- 冒泡排序的平均时间复杂度为O(n²)
- 我们可以利用一个BOOL值去记录某次冒泡操作是否进行了数据的交换,如果没有进行数据操作,则说明数组以达到完全有序的状态,不需要继续执行后续冒泡操作了,直接结束排序就可以了。
简单的代码实现
- (void)bubbleSort
{
NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
NSLog(@"排序之前的结果:%@",numberArray);
for (int i = 0; i<numberArray.count; i++) {
BOOL isNeedBreak = YES;
for (int j = 0; j<(numberArray.count-i-1); j++) {
if ([numberArray[j] intValue] > [numberArray[j+1] intValue]) {
NSNumber *numberTmp = numberArray[j];
numberArray[j] = numberArray[j+1];
numberArray[j+1] = numberTmp;
isNeedBreak = NO;
}
}
if (isNeedBreak == YES) {
break;
}
}
NSLog(@"排序之后的结果:%@",numberArray);
}
c
网友评论