分治算法(C++版)
#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;
}
最新文章
- android 底层入门开发(二)
- ADV数字的剪切
- 从本地向 Github 上传项目步骤攻略(快速上手版)
- matrix-tree
- 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片
- PHP替换,只替换匹配到的第一个
- 虚拟机的MAC地址分配与修改
- [Everyday Mathematics]20150131
- html在图片上实现下雨效果
- RPi 2B apache2 mysql php5 and vsftp
- 解决SDK Manager无法更新问题
- SURF 特征法
- win7 xp 双系统安装记录
- 【数据库】Mean web开发 02-Windows下Mongodb安装配置及常用客户端管理工具
- spring 的单例模式
- java乱码问题处理
- VIM文本替换命令
- 第一届“百度杯”信息安全攻防总决赛_Upload
- User Authentication with Angular and ASP.NET Core
- AI与RPA
热门文章
- docker的安装,自己写了一个安装docker的脚本,辅助做docker安装的实验(ubuntu)
- 问题描述:判断一个整数 n 是否为 2 的幂次方
- python之 filter
- JetBrains Quest 3
- 2016 Multi-University Training Contest 1 T3
- bash编程练习,带选项,添加或删除用户
- Spring Boot + LayUI 批量修改数据 数据包含着对象
- CORS 跨域中的 preflight 请求
- [转载]-虚拟键值表-virtual key code
- c++第一个程序测试-----c++每日笔记!