作家
登录

在Object-C中学习排序算法

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

  •           
  •         i++; 
  •         j--; 
  •     } 
  •     [self mb_exchangeWithIndexA:l indexB:j]; 
  •     return j; 
  • 三路快速排序

    快速排序是由东尼·霍尔所成长的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则须要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序平日明显比其他 Ο(nlogn) 算法更快,因为它的内部轮回(inner loop)可以在大年夜部分的架构上很有效力地被实现出来。

    对于包含有大年夜量反复数据的数组, 三路快排有巨大年夜的优势

    对于一般性的随机数组和近乎有序的数组, 三路快排的效力固然不是最优的, 然则是在异常可以接收典范围里

    是以, 在一些说话中, 三路快排是默认的说话库函数中应用的排序算法。比如Java:)

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

    1.算法图示

    算法图示

    2.代码实现

    1. #pragma mark - /**三路快排*/ 
    2. //对于包含有大年夜量反复数据的数组, 三路快排有巨大年夜的优势 
    3. - (void)mb_quick3WaysSort{ 
    4.     //要特别留意界线的情况 
    5.     [self mb_quick3WaysSort:self indexL:0 indexR:(int)self.count - 1]; 
    6. /// 递归的三路快速排序算法 
    7. - (void)mb_quick3WaysSort:(NSMutableArray *)array indexL:(int)l indexR:(int)r{ 
    8.     if (l >= r)  return
    9.       
    10.     self.comparator(nil, nil); 
    11.     // 随机在arr[l...r]典范围中, 选择一个数值作为标定点pivot 
    12.     [self mb_exchangeWithIndexA:l indexB:(arc4random_uniform(r-l+1) + l)]; 
    13.       
    14.     id v = array[l]; 
    15.       
    16.     int lt = l; // array[l+1...lt] < v 
    17.     int gt = r + 1; // array[gt...r] > v 
    18.     int i = l + 1; // array[lt+1...i) == v 
    19.       
    20.     while (i < gt) { 
    21.         if ( [self compareWithBarOne:array[i] andBarTwo:v] == NSOrderedAscending) { 
    22.             self.comparator(nil, nil); 
    23.             [self mb_exchangeWithIndexA:i indexB:lt + 1]; 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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