合并排序——分治法

输入:A={1 3 8 4 9 7 5 2 6 10}, start=0, end=9
结果:A={1 2 3 4 5 6 7 8 9 10}

合并排序——分治法

#include<iostream>
#include <stdio.h>
#define MAX 1000
int a[MAX];
int n;
void ArrayIntegrate(int a[],int start,int end)
{
    
    
    int mid=(start+end)/2;
    int i=start,j=mid+1;
    int k=0;
    int rra[end-start+1];
    //int *rra=new int[end-start+1];
    while(i<=mid&&j<=end)
    {
    
    
        if(a[i]<=a[j])
            rra[k++]=a[i++];
        else
            rra[k++]=a[j++];
    }
    while(i<=mid)
    {
    
    
        rra[k++]=a[i++];
    }
    while(j<=end)
    {
    
    
        rra[k++]=a[j++];
    }
    for(int i=0;i<k;i++)
    {
    
    
        a[start+i]=rra[i];
    }
}
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);
        ArrayIntegrate(A,start,end);
    }
}
int main()
{
    
    
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);

    for(int i=0;i<100;i++)
      for(int j=0;j<100;j++)
        mergeSort(a,0,n-1);
    for(int i=0;i<n;i++)
      printf("%d ",a[i]);
    return 0;
}
//10
//1 3 8 4 9 7 5 2 6 10
//1 2 3 4 5 6 7 8 9 10

猜你喜欢

转载自blog.csdn.net/weixin_46443659/article/details/109144146