您的位置:首页 > 编程语言 > C语言/C++

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;

}

///////////////////////////如果有问题欢迎大家指正////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: