iOS简单排序

来源:互联网 发布:巩义共赢网络是什么 编辑:程序博客网 时间:2024/04/19 10:22

. 冒泡排序

 -(void)logArrayFunctionNice {    BOOL flag = YES;    NSMutableArray * arr = @[@16,@1,@2,@9,@7,@12,@5,@3,@8,@13,@10].mutableCopy;    for (int i = 0; i < arr.count && flag; i++) {        flag = NO;        for (int j = (int)arr.count-2; j > i; j--) {            if (arr[j] < arr[j+1]) {                [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1];                flag = YES;            }        }    }

. 堆排序

- (void)heapSort:(NSMutableArray *)list{    NSInteger i ,size;    size = list.count;    //找出最大的元素放到堆顶    for (i= list.count/2; i>=0; i--) {        [self createBiggesHeap:list withSize:size beIndex:i];    }    while(size > 0){        [list exchangeObjectAtIndex:size-1 withObjectAtIndex:0]; //将根(最大) 与数组最末交换        size -- ;//树大小减小        [self createBiggesHeap:list withSize:size beIndex:0];    }    NSLog(@"%@",list);}- (void)createBiggesHeap:(NSMutableArray *)list withSize:(NSInteger) size beIndex:(NSInteger)element{    NSInteger lchild = element *2 + 1,rchild = lchild+1; //左右子树    while (rchild < size) { //子树均在范围内        if (list[element]>=list[lchild] && list[element]>=list[rchild]) return; //如果比左右子树都大,完成整理        if (list[lchild] > list[rchild]) { //如果左边最大            [list exchangeObjectAtIndex:element withObjectAtIndex:lchild]; //把左面的提到上面            element = lchild; //循环时整理子树        }else{//否则右面最大            [list exchangeObjectAtIndex:element withObjectAtIndex:rchild];            element = rchild;        }        lchild = element * 2 +1;        rchild = lchild + 1; //重新计算子树位置    }    //只有左子树且子树大于自己    if (lchild < size && list[lchild] > list[element]) {        [list exchangeObjectAtIndex:lchild withObjectAtIndex:element];    }}

自带排序方法

-(void)sort:(NSArray*)arr {    [arr sortedArrayUsingComparator:[self comparator];}- (NSComparator)comparator{    NSComparator cmptr = ^(id *obj1, id *obj2){        if (obj1.integerValue > obj2.integerValue)        {            return (NSComparisonResult)NSOrderedDescending;        }        if (obj1.integerValue < obj2.integerValue)        {            return (NSComparisonResult)NSOrderedAscending;        }        return (NSComparisonResult)NSOrderedSame;    };    return cmptr;}