基于C++的归并排序算法
来源:互联网 发布:免费的收银软件 编辑:程序博客网 时间:2024/06/05 17:22
基于C++的归并排序算法
归并排序(Merge Sort)是利用“归并”技术来进行排序。
算法基本思路
设有两个子文件(相当于输入堆,这里我是随机生成的)放在同一向量中相邻的位置上:L[low..mid],R[mid+1..high],然后通过不断分治(如图所示,图临时画的,不要嫌丑),最好再将其合并完成到Array数组中.
2、合并过程
设置i,j两个变量,分别指向当前位置,并依次比较L[i]和R[j],取数值小的放左边并做i++,使i位置后移一个,数值大的放到右边并做j++,使j的位置前移一个。
3、动态申请
动态申请*L和*R,并都申请为len1,len2的大小=INT_MAX;
4、程序代码
#include"cstdlib"
#include"iostream"
#include"time.h"
#include"limits.h"
using namespace std;
//合并排序
void Merge(int *_Array,int p,int q,int r){
//p第0个 r 第n-1个数 q 第(r+p)/2个数
intlen1 = q-p+1;
intlen2 = r-q;
int*L = new int[len1+1]; //用动态数组存储左边的数
int*R = new int[len2+1]; //用动态数组存储右边的数
for(inti=0;i<len1;i++){
//把Array数组左边的数放入L数组
L[i]= _Array[p+i];
}
for(intj=0;j<len2;j++){
//把Array数组右边的数放入R数组
R[j]= _Array[q+1+j];
}
L[len1]=R[len2]=INT_MAX; //定义无穷大
inti=0;
intj=0;
for(intk=p;k<=r;k++){
if(L[i]<R[j]){
//小的放左边,大的放右边
_Array[k]=L[i];
i++;
}
else{
_Array[k]=R[j];
j++;
}
}
}
//归并排序
void MergeSort(int _Array[],int p,int r){
if(p<r){
//p第0个;r第n-1个数;数组至少需要两个数据
intq;
q=(r+p)/2;//拆分两组
MergeSort(_Array,p,q);//拆分第0个到第(r+p)/2个,即拆分左半部分
MergeSort(_Array,q+1,r);//拆分第(r+p)/2个到第r个,即拆分右半部分
Merge(_Array,p,q,r);//调用合并函数,从第0个到第n-1个排好
}
}
int main(){
intn;
cout<<"输入产生数组元素的个数:";
cin>>n;
cout<<endl;
int*Array = new int[n]; //定义动态数组
cout<<"产生的随机数组为:";
for(inti=0;i<n;i++){
Array[i]= (rand()%(10000-0+1))+0; //产生0~100的整数
cout<<Array[i]<<"";
}
cout<<endl;
MergeSort(Array,0,n-1);
cout<<endl;
cout<<"AfterMergeSort:";
for(inti=0;i<n;i++){
cout<<Array[i]<<"";
}
return0;
}
- 基于C++的归并排序算法
- C语言归并排序算法的实现
- 基于JAVA的排序算法之六--归并排序
- 归并排序的算法
- 归并排序的实现(排序算法c语言描述)
- 排序算法的C语言实现-归并排序
- 算法 - 归并排序(C#)
- 数据结构(C#)_排序算法(归并排序)
- 排序算法c语言描述---归并排序
- 排序算法(C实现)-------- 归并排序
- 排序算法系列----归并排序(C++)
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- 归并排序的c语言代码--算法导论一致
- linux下归并排序(MergeSort)算法的C语言实现
- 算法导论 - 归并排序的 C 语言实现
- 归并排序的C语言实现【严蔚敏+算法导论】
- 经典算法之归并排序的C实现方法
- [POJ 3122] Pie 二分答案+贪心
- 【DP】APIO 2014 序列分割
- Storm示例剖析-fastWordCount
- iOS 根据时间排序
- 《手把手博客搭建教程2—LAMP安装配置》
- 基于C++的归并排序算法
- 提示框UIAlertView
- Spark2.0.X源码深度剖析之 SparkContext
- Bootstrap 网格系统
- 51NOD1287 加农炮 【RMQ】
- 学习C++的一些笔记(一)
- 有关graphviz中文乱码的一个与总不同的很无奈的解决方法
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分
- 企业管理理论综述与实践 — 管理、使命、愿景、价值观