码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2015-05-13 18:39:52      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and
Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序,称为二路归并

 

算法描述

归并操作的过程如下:

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  4. 重复步骤3直到某一指针到达序列尾
  5. 将另一序列剩下的所有元素直接复制到合并序列尾

 

技术分享

 

分类 排序算法
数据结构 数组
最差时间复杂度 技术分享
最优时间复杂度 技术分享
平均时间复杂度 技术分享
最差空间复杂度 技术分享

 

 

C 代码:

void merge_sort(int src[] , int len)
{
   //第一层循环是确定归并的分组
    for( int n = 1 ; n <= len ; n <<= 1 ) {
       //第二岑循环是结合第一层循环确定两个要合并的分组
        for( int m = 0 ; m < len ; m += 2*n ) {
            //合并两个子分组
            for( int nextTuple = m+n ; nextTuple < (m+n*2)>len?len:(m+n*2) ; nextTuple++ ){
                for( int prevTuple = m ; prevTuple < nextTuple ; prevTuple++ ){
                    if( src[nextTuple] >= src[prevTuple] ){
                        int temp = src[nextTuple];
                        for(int k = nextTuple ; k > prevTuple ; k--)
                        {
                            src[k] = src[k-1];
                        }
                        src[prevTuple] = temp;
                    }
                }
            }
        }
    }
}


运行结果:

技术分享

 

归并排序

标签:

原文地址:http://www.cnblogs.com/jvane/p/4494645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!