算法之一 : <<快速排序>>

- (void)viewDidLoad {
    [super viewDidLoad];

  
    NSMutableArray *array = [NSMutableArray arrayWithArray:@[@5,@1,@9,@3,@7,@4,@8,@6,@2]];
    
    [self quickSortWithArray:array left:0 right:array.count-1];
    
    NSLog(@"%@",array);
    
}

#pragma mark ---快速排序算法 ----
-(void)quickSortWithArray:(NSMutableArray *)dataArray left:(NSInteger)left right:(NSInteger)right{
    
    /*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
    if (left >= right) {
        return;
    }
    
    NSInteger i = left;
    NSInteger j = right;
    NSNumber * key = dataArray[left];
    
    /*控制在当组内寻找一遍*/
    while (i< j) {
        
        while (i= dataArray[i])

        /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
         因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
        {
            i++;
        }
        
        dataArray[j] = dataArray[i];
        
    }
    
    dataArray[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
    [self quickSortWithArray:dataArray left:left right:i-1];
    /*最后用同样的方式对分出来的左边的小组进行同上的做法*/
    [self quickSortWithArray:dataArray left:i+1 right:right];
    /*用同样的方式对分出来的右边的小组进行同上的做法*/
    
    /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}

你可能感兴趣的:(算法之一 : <<快速排序>>)