您的位置:首页 > 其它

排序算法-归并排序

2016-06-27 18:45 246 查看
#include<iostream>

using namespace std;

/*

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

*/

int* MergeSort(int list[],int index1,int index2)

{

if(index1==index2)//当只有一个元素时返回该元素

{

int *p=new int(list[index1]);

return p;

}

int index=(index1+index2)/2;

int*sorted1=MergeSort(list,index1,index);//将数组分成两部分,左边排序

int*sorted2=MergeSort(list,index+1,index2);//右边排序

int* sorted=new int[index2-index1+1];//保存排序后的两边的元素合起来

int c1,c2;c1=c2=0;

for(int i=0;i<index2-index1+1;i++)

{

if(c2<=index2-index-1&&c1<=index-index1)//如果两边都有元素

{

if(sorted1[c1]<=sorted2[c2]&&c1<=index-index1)

{

sorted[i]=sorted1[c1];

c1++;

}

else if(sorted1[c1]>sorted2[c2]&&c2<=index2-index)

{

sorted[i]=sorted2[c2];

c2++;

}

}

else if(c2>index2-index-1&&c1<=index-index1)//如果只有左边有元素

{

sorted[i]=sorted1[c1];

c1++;

}

else //如果只有右边有元素

{

sorted[i]=sorted2[c2];

c2++;

}

}

delete sorted1,sorted2;

return sorted;

}

int main()

{

int list[]={3,4,5,2,1,7,7,6,5,9};

int *sorted=MergeSort(list,0,9);

for(int i=0;i<10;i++)

cout<<sorted[i]<<" ";

cout<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: