美文网首页
OC版-归并排序

OC版-归并排序

作者: 木槿WEIXIAO | 来源:发表于2021-09-24 14:02 被阅读0次

归并排序

  • 1.不断地将当前序列平均分割成2个子序列,直到不能在分割(每个序列中只剩下一个元素)
  • 2.不断地将两个子序列合并成一个有序序列,直到最终剩下一个有序序列
  • 3.归并排序要比(冒泡排序,选择排序,插入排序)效率要高
//归并排序
- (void)mergeSortWithArray:(NSMutableArray *)array
{
    [self sortWithBegin:0 end:(int)array.count array:array];
}
- (void)sortWithBegin:(int)begin end:(int)end array:(NSMutableArray *)array
{
    if (end - begin < 2) return;
    int mid = (begin + end) >> 1;
    [self sortWithBegin:begin end:mid array:array];
    [self sortWithBegin:mid end:end array:array];
    [self mergeWithBegin:begin mid:mid end:end array:array];
}
- (void)mergeWithBegin:(int)begin mid:(int)mid end:(int)end array:(NSMutableArray *)array
{
    //两个数组
    //begin:需要合并的开始位置
    //mid:需要合并的中间位置
    //end:需要合并的结束位置
    //leftArray:从array中分割出来的左半部分
    //array:总数组
    
    int li = 0;//左部分数组开始索引
    int le = mid - begin;//左部分结束索引
    int ai = begin;//插入位置索引
    int ri = mid;//右半部分开始索引
    int re = end;//右半部分结束索引
    
    NSMutableArray *leftArray = [[NSMutableArray alloc] init];
    for (int i = 0; i < le; i ++) {
        leftArray[i] = array[begin + i];
    }
    
    while (li < le) {
        
        NSNumber *lV = leftArray[li];
        NSNumber *rV = @0;
        if (ri < re) {
            rV = array[ri];
        }
        if (ri < re && [lV integerValue] > [rV integerValue]) {
            array[ai] = array[ri];
            ai ++;
            ri ++;
        }else{
            array[ai] = leftArray[li];
            ai ++;
            li ++;
        }
    }
    //不用做任何操作
}

相关文章

  • OC版-归并排序

    归并排序 1.不断地将当前序列平均分割成2个子序列,直到不能在分割(每个序列中只剩下一个元素) 2.不断地将两个子...

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • 排序算法

    准备工作 一、快速排序 二、归并排序 三、堆排序 四、 二分查找 /*二分查找*/ 五、 冒泡排序 /*OC 冒...

  • 多线程归并排序 go实现

    特性 线程数可以调整 混合使用归并排序的递归版和非递归版实现减少递归调用损耗 线程利用率高 不足:归并排序的mer...

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 10个常见的排序算法总结

    10个常见的排序(冒泡,插入,快速,归并,堆,希尔,计数,桶,基数,选择排序)算法总结和参考的资源,代码使用OC实...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

网友评论

      本文标题:OC版-归并排序

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