C++ 归并排序 递归实现

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;
}

///如果有问题欢迎大家指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值