iOS---冒泡排序、插入排序、选择排序

2018-09-02  本文已影响0人  彬至睢阳

#pragma mark----冒泡排序----将相邻的两个元素两两比较,根据大小来交换元素的位置

- (NSArray*)bubbleSort:(NSArray*)origonArr{

     NSMutableArray *newArr = [[NSMutableArray alloc]initWithArray:origonArr];

    for(NSInteger indexI =0; indexI < newArr.count-1; indexI++){

        BOOL isSorted = YES;//用来标记每一层是否是有序的,默认为true.

        for(NSInteger indexJ =0; indexJ < newArr.count-1; indexJ++){

            if(newArr[indexJ] > newArr[indexJ+1]) {

                isSorted =NO;//// 如果有交换元素,那么不是有序,该bool值改为NO.

                [newArr exchangeObjectAtIndex:indexJ+1 withObjectAtIndex:indexJ];

            }

        }

        if(isSorted) {

            break;// 在内层中,如果该bool值没有被改为NO,那么就说明内层没有元素交换,那么该数列排序完成了,直接结束循环。

        }

    }

    returnnewArr;

}

#pragma mark---插入排序---

- (NSArray*)insertSort:(NSArray*)origonArr{

   NSMutableArray *newArr = [[NSMutableArray alloc]initWithArray:origonArr];

  for(NSInteger indexI =1; indexI <newArr.count; indexI++) {

        for(NSInteger indexJ = indexI; indexJ >0; indexJ--) {

             if(newArr[indexJ-1] > newArr[indexJ]) {

                [newArr exchangeObjectAtIndex:indexJ-1 withObjectAtIndex:indexJ];

            }else{

                break;

            }

        }

    }

    returnnewArr;

}

#pragma mark-----选择排序---就是先找出数组中最小的,然后依次找出数据并排序

- (NSArray*)selectionSort:(NSArray*)origonArr{

  NSMutableArray *newArr = [[NSMutableArray alloc]initWithArray:origonArr];

    for(NSInteger indexI =0; indexI<newArr.count; indexI++) {

        NSInteger minIndex = indexI;

        for(NSInteger indexJ = indexI+1; indexJ<newArr.count; indexJ++) {

            if(newArr[indexJ] < newArr[minIndex]) {

            minIndex = indexJ;

           }

        }

        [newArr exchangeObjectAtIndex:indexI withObjectAtIndex:minIndex];

    }

    returnnewArr;

}

上一篇 下一篇

猜你喜欢

热点阅读