#include<iostream>

using namespace std;  

void printArray(int array[],int length)  
{  
    for (int i = 0; i < length; ++i)  
    {  
        cout << array[i] << "  ";  
    }  
}  

void merge(int array[],int first,int center,int end)  
{  
    int n1 = center - first + 1;  
    int n2 = end - center;  
    int L[n1+1];  
    int R[n2+1];  
    for(int i = 0; i < n1; i++ )  
    {  
        L[i] = array[first+i];     
    }   
    for(int j = 0; j < n2; j++ )  
    {  
        R[j] = array[center+j+1];
    }  
    L[n1] = 1000;   
    R[n2] = 1000;   
    int k1 = 0;  
    int k2 = 0;  
    for (int k = first; k <= end; ++k)   
    {     
        if(L[k1] <= R[k2])  
        {     
            array[k] = L[k1];  
            k1 = k1 + 1;   
        }else{  
            array[k] = R[k2];  
            k2 = k2 + 1;   
        }  
    }  
}  
void merge_sort(int array[],int first,int end)    
{  
    if(first < end){  
        int center = (first + end)/2;    
        merge_sort(array,first,center);     
        merge_sort(array,center+1,end);  
        merge(array,first,center,end);  
    }  
}  
  
int main(int argc, char const *argv[])  
{  
    int array[8] = {7,6,5,4,3,2,1,0};
    cout << "原数列" << endl;
printArray(array,8);    
cout << endl;
    merge_sort(array,0,7); 

//merge_sort()函数等价与下面注释,为了便于理解特举一个八个元素的数组详细说明 
//如不懂分解原理,可参考递归函数 
    /*
merge(array,0,0,1);
    merge(array,2,2,3);
    merge(array,0,1,3);
    merge(array,6,6,7);
    merge(array,4,4,5);
    merge(array,4,5,7);
    merge(array,0,3,7); 
    cout << endl;
    */
 
    cout << "排序后的数列" << endl;
    printArray(array,8);  
    
    
    return 0;  
}

最新文章

  1. android 底层入门开发(二)
  2. ADV数字的剪切
  3. 从本地向 Github 上传项目步骤攻略(快速上手版)
  4. matrix-tree
  5. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片
  6. PHP替换,只替换匹配到的第一个
  7. 虚拟机的MAC地址分配与修改
  8. [Everyday Mathematics]20150131
  9. html在图片上实现下雨效果
  10. RPi 2B apache2 mysql php5 and vsftp
  11. 解决SDK Manager无法更新问题
  12. SURF 特征法
  13. win7 xp 双系统安装记录
  14. 【数据库】Mean web开发 02-Windows下Mongodb安装配置及常用客户端管理工具
  15. spring 的单例模式
  16. java乱码问题处理
  17. VIM文本替换命令
  18. 第一届“百度杯”信息安全攻防总决赛_Upload
  19. User Authentication with Angular and ASP.NET Core
  20. AI与RPA

热门文章

  1. docker的安装,自己写了一个安装docker的脚本,辅助做docker安装的实验(ubuntu)
  2. 问题描述:判断一个整数 n 是否为 2 的幂次方
  3. python之 filter
  4. JetBrains Quest 3
  5. 2016 Multi-University Training Contest 1 T3
  6. bash编程练习,带选项,添加或删除用户
  7. Spring Boot + LayUI 批量修改数据 数据包含着对象
  8. CORS 跨域中的 preflight 请求
  9. [转载]-虚拟键值表-virtual key code
  10. c++第一个程序测试-----c++每日笔记!