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;
}
///如果有问题欢迎大家指正