归并排序

来源:互联网 发布:阿里金融云解决方案 编辑:程序博客网 时间:2024/05/22 12:38

只贴代码:

#include <iostream>using namespace std;void Merge(int *a,int start,int mid,int end){    int i=0,j=0,k=0;    int len1 = mid - start+1;    int len2 = end - mid;    int *L = new int[len1];    int *R = new int[len2];    j=0;    for(i=start;i<=mid;i++)        L[j++] = a[i];    j=0;    for(;i<=end;i++)        R[j++] = a[i];    for(k = start,i=0,j=0;i<len1&&j<len2;k++)    {        if(L[i] < R[j])        {            a[k] = L[i++];        }        else            a[k] = R[j++];    }    if(i<len1)        for(;i<len1;)            a[k++] = L[i++];    if(j<len2)        for(;j<len2;)            a[k++] = R[j++];}void MergeSort(int * a,int start,int end){    if(start < end)    {        int mid = (start+end) / 2;        MergeSort(a,start,mid);        MergeSort(a,mid+1,end);        Merge(a,start,mid,end);    }}void PrinfArray(int *a,int len){    for(int i=0;i<len;i++)        cout<<a[i]<<"   ";    cout<<endl;}int main(){    int a[]={3,2,1,4,5,6};    int len = sizeof(a)/sizeof(int);    MergeSort(a,0,len-1);    PrinfArray(a,len);    cout << "Hello world!" << endl;    return 0;}

方法2:

void MergeSort1(int *a ,int *copyArray,int start,int end){    if(start == end)    {        copyArray[start] = a[start];        return ;    }    int len = (end - start)/2;    MergeSort1(copyArray,a,start,start+len);    MergeSort1(copyArray,a,start+len+1,end);    ///前半段的最后一个    int i= start +len;    ///后半段的最后一个    int j= end;    int index = end;    while(i>=start && j>=start+len+1)    {        if(a[i]>a[j])            copyArray[index--] = a[i--];        else            copyArray[index--] = a[j--];    }    while(i>=start)    {        copyArray[index--] = a[i--];    }    while(j>=start+len+1)        copyArray[index--] = a[j--];}void MergeSort1(int * a,int len){    if(a == NULL || len < 0)        return ;    int * copyArray = new int[len];    for(int i=0;i<len;i++)        copyArray[i] = a[i];    MergeSort1(a,copyArray,0,len-1);}



0 0
原创粉丝点击