赞
踩
有一个无序数组,用冒泡排序法将其排成有序数组
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"31",@"22",@"51",@"3",@"2",@"1",@"4", nil];
冒泡排序的思想:
第一次比较:
1.将index=0和index=1的值进行比较,
2.如果index=0 > index=1,则互换他俩的位置
3.如果index0 < index=1, 则数组保持不变
4.以此类推,第二次比较的两个值为 index1 和 index2
5.需要比较 array.count-1趟
以下为最简单的冒泡排序代码
- #pragma mark 冒泡排序
- - (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
- {
- for (int i = 0; i < array.count -1 ; i++)
- {
- for (int j = 0; j < array.count -1 -i; j++)
- {
- if ([array[j] intValue] > [array[j+1] intValue])
- {
- //互换位置
- [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
- }
- }
- }
-
- return array;
- }
但是还可以再优化:如果一个数组排到第2趟就已经有序,则不需要再排下去(增加时间复杂度)
不需要排下去的一句就是 不需要互换位置,我们可以设定一个值来检测是否需要换位置,如果不需要再换,则可以跳出循环:
- #pragma mark 冒泡排序
- - (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
- {
- for (int i = 0; i < array.count -1; i ++)
- {
- //默认不需要换位置
- BOOL isChange = NO;
-
- for (int j = 0; j < array.count - 1 -i; j ++)
- {
- if ([array[j] intValue] > [array[j +1 ] intValue])
- {
- //需要换位置
- isChange = YES;
- [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
- }
- }
-
- //循环完一趟,如果不需要换位置,则说明这个数组已经是有序的
- if (isChange == NO)
- {
- break;
- }
- }
-
- return array;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。