快速排序

2017-12-14  本文已影响20人  流浪瑞兹

快速排序是对冒泡排序的一种改进。它的基本思想是:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

- (void)quickSort:(NSMutableArray *)array andLeft:(NSInteger)left andRight:(NSInteger)right{
    
    if(left >= right){//如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了
        return ;
    }
    
    NSInteger i = left;
    NSInteger j = right;
    NSInteger key = [array[i] intValue];//设置基准值
    
    while (i < j) {//控制在当组内寻找一遍
        //从右边向左查找比基准小的值
        while (i < j && key <= [array[j] intValue]) {//比基准数大 就向前寻找
            j --;//向前寻找
        }
        //如果比基准值小 把小值调换到i的位置 再从i位置开始找
        array[i] = array[j];
        //从i位置开始想右边找比基准值大的数
        while(i < j && key > [array[i] intValue]){//如果比基准值小 就向后寻找
            i++;
        }
        //找到比基准值大的,把 大值调换到j处
        array[j] = array[i];
    }
    //将基准书放到正确位置
    array[i] = @(key);
    //递归基准数左边
    [self quickSort:array andLeft:left andRight:i-1];
    //递归基准数右边
    [self quickSort:array andLeft:i+1 andRight:right];
    
}
上一篇 下一篇

猜你喜欢

热点阅读