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

2020-05-14  本文已影响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]);
    }];
}

-(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];
   }
   
  
}
上一篇下一篇

猜你喜欢

热点阅读