排序算法 - 快速排序

前言

平时开发中常见有需要排序的场景,例如淘宝客户端中商品搜索结果页,可以根据综合数据、信用、价格进行排序,这里就涉及到大量的各种商品数据,甚至有可能产品经理拿出七尺长的砍刀,要求你根据商品上架时间、价格、地区、销量、折扣等等的数据进行排序,那你为了不被拿去祭天,随即高举算法的大旗,拼了。。。

原理

在需要排序的数组中选取一个数作为切点元素,从右往左查找直到找到比切点元素小的元素并记录元素位置,排到切点元素左边,从左往右查找直到找到比切点元素大的元素并记录元素位置,排到切点元素右边,循环从右往左、从左往右这个步骤,直到元素位置相同则结束一趟循环,此时将数组切分成了两个新数组,再分别对两个新数组执行上面的循环步骤,直到数组不能再切分,完成排序。

适用

适合使用快速排序算法一般有如下特征:

  1. 排序数组数据量非常大;
  2. 排序数组是无序的;
  3. 排序的效率要求很高;

运用

NSMutableArray *array = [NSMutableArray arrayWithArray:@[@111, @23, @89, @31, @63, @35, @35, @57, @71, @99]];

NSLog(@"快速排序后的数组: %@", [self quickSortArray: array withLeftIndex:0 rightIndex:array.count-1]);

排序方法封装成方法:

- (NSMutableArray *)quickSortArray: (NSMutableArray *)array withLeftIndex: (NSInteger)left rightIndex: (NSInteger)right {

    if (left >= right) {
        return array;
    }

    NSInteger i = left, j = right;
    NSInteger key = [array[left] integerValue]; // 切分元素

    while (i < j) {
    
        while ([array[j] integerValue] >= key && i < j) {
        
            j--;
        }
    
        array[i] = array[j];
    
        while ([array[i] integerValue] <= key && i < j ) {
        
            i++;
        }
    
        array[j] = array[i];
    }

    array[i] = @(key);

    [self quickSortArray:array withLeftIndex:left rightIndex:j-1];
    [self quickSortArray:array withLeftIndex:i+1 rightIndex:right];

    return array;
}

引用

http://www.cnblogs.com/joey-hua/p/4983618.html
http://www.baike.com/wiki/快速排序
https://baike.baidu.com/item/快速排序算法/369842?fr=aladdin#3_6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结:快速排序大体上也是用的归并的思想,与归并排序不同的是它通过切分确定某一个元素的最终位置并且将较大的数和较小的...
    Hurtck阅读 364评论 0 0
  • 快速排序是一种分治排序的算法,将数组划分为两个部分,然后分别对两个部分进行排序。在实际应用中,一个经过仔细调整的快...
    IgorNi阅读 422评论 0 0
  • 1.冒泡排序(依次循环旁边的比较放到后边去) 冒泡排序是通过比较两个相邻元素的大小实现排序,如果前一个元素大于后一...
    为什么划船不靠桨阅读 865评论 2 3
  • 快速排序思想:1、首先在一组待排序的元素中找到一个基准数(一般用第一个)2、然后用两个游标分别指向第一(最左)和最...
    WX_WDN阅读 666评论 0 0
  • 快速排序,可以称得上是21世纪最伟大的算法之一,它的性能也是相当不错的,它的平均时间复杂度是O(nlogn)是一种...
    关玮琳linSir阅读 590评论 2 29