美文网首页
算法之一 : <<快速排序>>

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

作者: zcaaron | 来源:发表于2016-08-12 18:42 被阅读21次
- (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<j && key <= dataArray[j])
        /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
         序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
        {
            
            j--;/*向前寻找*/
            
        }
        dataArray[i] = dataArray[j];
        /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
         a[left],那么就是给key)*/

        while(i < j && key >= 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 为止*/
}

相关文章

网友评论

      本文标题:算法之一 : <<快速排序>>

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