归并排序(Mergesort)
名词解释 :归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
算法原理
归并排序采用分而治之思想将数组内容划分成许多个单位,使每个单位内序列为有序再合并各个有序的序列。
图解如下:
算法描述:
时间复杂度:O(n log n)
空间复杂度:O(n)
算法稳定性:稳定
算法实现步骤:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置。
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。
重复步骤3直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。
算法实现
实现归并排序首先要实现两个有序数组的合并:
算法如下:
1 | void MemeryArray(int a[], int n, int b[], int m, int c[]) |
有了合并以后就完成了算法的主体,全部实现如下:
1 | void mergetarr(int arr[], int left, int right, int tmp[])//合并算法 |
结果:
本文总阅读量次