C++ 归并排序 递归实现
2014-03-11 11:17
435 查看
////////////////////////////vs中可直接运行/////////////////////////////////
归并排序算法原理:在考虑将n个记录进行排序之前,先考虑如何将两个已排序的表归并为一个有序表。(Merge函数所做的事情)。
用递归的方法将一个带有n个记录的表(数组) 拆解,再用merge函数排序后,再合并
#include "stdafx.h"
#include<iostream>
using namespace std;
////////////////////归并两个已排序的表////////////////////
///前一个表为start到mid 第二个表为mid+1到end//////////////
void Merge(int list[],int start,int mid,int end)
{
int*resultlist=(int*)malloc(sizeof(int)*(end-start+1));
int i,j,k;
k=i=start;
j=mid+1;
int index=start;
while(i<=mid&&j<=end)
{
if(list[i]<=list[j])
resultlist[index++]=list[i++];
else
resultlist[index++]=list[j++];
}
for(;i<=mid;i++)
resultlist[index++]=list[i];
for(;j<=end;j++)
resultlist[index++]=list[j];
for(int temp=0;temp<(end-start+1);temp++)
{
list[k+temp]=resultlist[k+temp];
}
}
////////递归的拆分list数组
void MergeSort(int list[],int left,int right)
{
if(right>left)
{
int mid=(right+left)/2;
MergeSort(list,left,mid);
MergeSort(list,mid+1,right);
Merge(list,left,mid,right);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int list[]={5,8,6,2,9,10};
MergeSort(list,0,5);
for(int i=0;i<6;i++)
cout<<list[i]<<" ";
return 0;
}
///////////////////////////如果有问题欢迎大家指正////////////////////////////////////
归并排序算法原理:在考虑将n个记录进行排序之前,先考虑如何将两个已排序的表归并为一个有序表。(Merge函数所做的事情)。
用递归的方法将一个带有n个记录的表(数组) 拆解,再用merge函数排序后,再合并
#include "stdafx.h"
#include<iostream>
using namespace std;
////////////////////归并两个已排序的表////////////////////
///前一个表为start到mid 第二个表为mid+1到end//////////////
void Merge(int list[],int start,int mid,int end)
{
int*resultlist=(int*)malloc(sizeof(int)*(end-start+1));
int i,j,k;
k=i=start;
j=mid+1;
int index=start;
while(i<=mid&&j<=end)
{
if(list[i]<=list[j])
resultlist[index++]=list[i++];
else
resultlist[index++]=list[j++];
}
for(;i<=mid;i++)
resultlist[index++]=list[i];
for(;j<=end;j++)
resultlist[index++]=list[j];
for(int temp=0;temp<(end-start+1);temp++)
{
list[k+temp]=resultlist[k+temp];
}
}
////////递归的拆分list数组
void MergeSort(int list[],int left,int right)
{
if(right>left)
{
int mid=(right+left)/2;
MergeSort(list,left,mid);
MergeSort(list,mid+1,right);
Merge(list,left,mid,right);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int list[]={5,8,6,2,9,10};
MergeSort(list,0,5);
for(int i=0;i<6;i++)
cout<<list[i]<<" ";
return 0;
}
///////////////////////////如果有问题欢迎大家指正////////////////////////////////////
相关文章推荐
- 归并排序 C++/Java 递归实现代码 -犯了菜鸟老毛病
- 【排序】归并排序与快速排序:C++递归实现
- 非递归实现归并排序
- 简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- 二叉树(前中后序递归非递归遍历,层次遍历,C++实现)
- 归并排序(递归实现和迭代实现)
- 归并排序-c++代码实现及运行实例结果
- 【c++】利用递归实现走迷宫
- 快速排序的递归和非递归实现 -----C++、JAVA代码实现
- 归并排序c++和javascript实现
- c++实现二叉排序树-插入-删除-递归遍历
- 排列和组合简单的递归思路以及C++实现
- C++字符串拷贝实现:递归方法&非递归方法
- C++ 归并排序实现(算法导论)
- 数组及链表的归并排序(C++实现)
- C++模板实现归并排序
- 二叉树遍历 非递归 C++实现代码
- 归并排序(递归实现+非递归实现+自然合并排序)
- 链表归并排序的递归与非递归实现
- 递归和非递归实现归并排序