Object-c基本排序(快排,直接选择,直接插入)

  • 直接插入排序算法思想:

插入排序首先考虑数组的前两个元素,即data[0]与data[1],如果次序颠倒了,就交换。然后考虑data[2],将其插入到前面已经排序好的位置上,依次到最后一个元素为止。
image.png

  • 直接插入排序代码如下:
-(void)insertSort{
    printf("直接插入排序之前数组结果为:\n");
    [self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
              printf(" %d",[obj intValue]);
        }];
    for(NSInteger i = 1; i < self.array.count; i ++){
        NSInteger num1 = [self.array[i] intValue];
        for (NSInteger j = 0; j <= i; j ++) {
            NSInteger num2 = [self.array[j] intValue];
            if(num2 > num1){
                NSInteger tmp = [self.array[i] intValue];
                self.array[i] = self.array[j];
                self.array[j] = [NSNumber numberWithInteger:tmp];
            }
        }
    }
    printf("\n直接插入排序之后数组结果为:\n");
    [self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
           printf(" %d",[obj intValue]);
     }];
}

*直接选择排序:

第一次找序列中最小的元素,与第一个位置进行交换;第二次找第二小的元素与2个位置的元素进行交换。即在每次迭代中找出data[i]…data[n-1]的最小元素与data[i]进行交换,示意图如下:
image.png

  • 直接选择排序代码如下:
-(void)selectSort{
    printf("直接选择排序之前数组结果为:\n");
   [self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
             printf(" %d",[obj intValue]);
       }];
   for(NSInteger i = 0; i < self.array.count - 1; i ++){
       NSInteger min = I;
       for (NSInteger j = i + 1; j < self.array.count; j ++) { //找剩余数组的最小值
           if([self.array[j] intValue] < [self.array[min] intValue]){
               min = j;
           }
       }
       NSInteger tmp = [self.array[i] intValue];
       self.array[i] = self.array[min];
       self.array[min] = [NSNumber numberWithInteger:tmp];
       
   }
   printf("\n直接选择排序之后数组结果为:\n");
   [self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
          printf(" %d",[obj intValue]);
    }];
}

  • 快速排序:思路如下:
    image.png
  • 快速排序 代码为:
-(void)quickSort:(NSMutableArray*) array lowIndex:(NSInteger) low heightIndex:(NSInteger)height{
  
   NSInteger i = low;
   NSInteger j = height;
   
   while (i < j) {
       if (i < j && ([array[i] intValue] < [array[j] intValue])) {
           i++;
       }
       if (i < j && ([array[i] intValue] >= [array[j] intValue])) {
           NSInteger tmp = [self.array[i] intValue];
           self.array[i] = self.array[j];
           self.array[j] = [NSNumber numberWithInteger:tmp];
           j --;
       }
       [self quickSort:array lowIndex:low heightIndex:i-1];
       [self quickSort:array lowIndex:i + 1 heightIndex:height];
   }
   
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值