作家
登录

在Object-C中学习排序算法

作者: 来源: 2017-08-06 12:49:35 阅读 我要评论

 
  •             [self mb_exchangeWithIndexA:j indexB:i]; 
  •         } 
  •     } 
  •     self.comparator(nil, nil); 
  •     [self mb_exchangeWithIndexA:j indexB:l]; 
  •     return j; 
  • 过多反复键值使Quick Sort降至O(n^2)

    应用双快速排序后, 我们的快速排序算法可以轻松的处理包含大年夜量元素的数组

    快速排序的优化可推敲当分区距离小的的时刻转而应用插入排序

    1.算法图示

    算法图示

    2.代码实现

    1. #pragma mark - /**双路快排*/ 
    2. ///应用双快速排序后, 我们的快速排序算法可以轻松的处理包含大年夜量元素的数组 
    3. - (void)mb_identicalQuickSort{ 
    4.     //要特别留意界线的情况 
    5.     [self mb_quickSort:self indexL:0 indexR:(int)self.count - 1]; 
    6. - (void)mb_identicalQuickSort:(NSMutableArray *)array indexL:(int)l indexR:(int)r{ 
    7.     if (l >= r) return
    8.     int p = [self __partition2:array indexL:l indexR:r]; 
    9.     [self mb_quickSort:array indexL:l indexR:p-1]; 
    10.     [self mb_quickSort:array indexL:p + 1 indexR:r]; 
    11. - (int)__partition2:(NSMutableArray *)array indexL:(int)l indexR:(int)r{ 
    12.     // 随机在arr[l...r]典范围中, 选择一个数值作为标定点pivot 
    13.     [self mb_exchangeWithIndexA:l indexB:(arc4random()%(r-l+1))]; 
    14.     id v = array[l]; 
    15.     // arr[l+1...i) = v 
    16.     int i = l + 1, j = r; 
    17.     while (true) { 
    18.           
    19.         while (i  l + 1 && self.comparator(array[j],v) == NSOrderedDescending) 
    20.             j--; 
    21.           
    22.         if (i > j) { 
    23.             break
    24.         } 
    25.         [self mb_exchangeWithIndexA:i indexB:j]; 

        推荐阅读

        关于大数据,你应该知道的75个专业术语

      上篇(25 个术语)如不雅你刚接触大年夜数据,你可能会认为这个范畴很难以懂得,无大年夜下手。不过,你可以大年夜下面这份包含了 25 个大年夜数据术语的清单入手,那么我们开端吧。算法(Algorithm):算法可以懂得>>>详细阅读


      本文标题:在Object-C中学习排序算法

      地址:http://www.17bianji.com/lsqh/36561.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)