输入: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