排序算法-归并排序

Posted 梦想田园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-归并排序相关的知识,希望对你有一定的参考价值。

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

以上是关于排序算法-归并排序的主要内容,如果未能解决你的问题,请参考以下文章

十大经典排序算法总结(归并排序)

排序算法——归并排序

排序算法之归并排序(Java)

排序算法之归并排序(Java)

归并排序(递归非递归以及自然归并排序)算法总结

看动画学算法之:排序-归并排序