美文网首页
Object-c(直接插入,直接选择,冒泡,快速排序)

Object-c(直接插入,直接选择,冒泡,快速排序)

作者: 劉胡來 | 来源:发表于2020-05-14 18:17 被阅读0次
    • 直接插入排序算法思想:

    插入排序首先考虑数组的前两个元素,即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];
       }
       
      
    }
    

    相关文章

      网友评论

          本文标题:Object-c(直接插入,直接选择,冒泡,快速排序)

          本文链接:https://www.haomeiwen.com/subject/xchxohtx.html