当前位置:   article > 正文

iOS(Object C) 冒泡排序_ios冒泡排序代码

ios冒泡排序代码

有一个无序数组,用冒泡排序法将其排成有序数组

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趟

以下为最简单的冒泡排序代码

  1. #pragma mark 冒泡排序
  2. - (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
  3. {
  4. for (int i = 0; i < array.count -1 ; i++)
  5. {
  6. for (int j = 0; j < array.count -1 -i; j++)
  7. {
  8. if ([array[j] intValue] > [array[j+1] intValue])
  9. {
  10. //互换位置
  11. [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
  12. }
  13. }
  14. }
  15. return array;
  16. }

但是还可以再优化:如果一个数组排到第2趟就已经有序,则不需要再排下去(增加时间复杂度)

不需要排下去的一句就是 不需要互换位置,我们可以设定一个值来检测是否需要换位置,如果不需要再换,则可以跳出循环:

  1. #pragma mark 冒泡排序
  2. - (NSMutableArray *)bubbleSortWithArray:(NSMutableArray *)array
  3. {
  4. for (int i = 0; i < array.count -1; i ++)
  5. {
  6. //默认不需要换位置
  7. BOOL isChange = NO;
  8. for (int j = 0; j < array.count - 1 -i; j ++)
  9. {
  10. if ([array[j] intValue] > [array[j +1 ] intValue])
  11. {
  12. //需要换位置
  13. isChange = YES;
  14. [array exchangeObjectAtIndex:j withObjectAtIndex:j+1];
  15. }
  16. }
  17. //循环完一趟,如果不需要换位置,则说明这个数组已经是有序的
  18. if (isChange == NO)
  19. {
  20. break;
  21. }
  22. }
  23. return array;
  24. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号