说说算法那些事-归并排序

归并排序(mergeSort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。查看完整代码

1.算法思想:将待排序元素,分成若干子序,然后在将子序排序成有序。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

2.算法步骤:

(1)、比较arr[i]和arr[j]的大小,若arr[i]≤arr[j],则将第一个有序表中的元素arr[i]复制到temp[k]中,并令i和k分别加上1;否则将第二个有序表中的元素arr[j]复制到temp[k]中,并令j和k分别加上1,

(2)、如此循环下去,直到其中一个有序表取完。

(3)、再将另一个有序表中剩余的元素复制到temp中从下标k开始。

(4)、将temp里面的元素合并到arr中。

归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

3.算法详解

初始状态:6,2,8,10,8,9,1

第一次归并后:{6,2},{8,10},{8,9},{1}

第二次归并后:{2,6,8,10},{1,8,9};

第三次归并后:{1,2,6,8,8,9,10};

排序结束

4.算法分析:

时间复杂度:对一个数组,分成小区间需要logN,每一次都有归并操作,所以归并排序在O(N*logN)

稳定性:是稳定的排序算法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,789评论 0 7
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,042评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,610评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,112评论 0 15
  • 关于SharedPreferences小博带大家再来总结一下:SharedPreferences 是Android...
    博为峰51Code教研组阅读 2,849评论 0 0

友情链接更多精彩内容