分治算法——归并排序
#include <iostream>
using namespace std;
void mergeArray(int s[],int begin,int end,int mid)
{
int* temp = new int[end-begin+1];
int i = begin,j = mid+1;
int k = 0;
while(i<=mid&&j<=end)
{
if(s[i]<s[j])
temp[k++] = s[i++];
else
temp[k++] = s[j++];
}
while(i<=mid) temp[k++] = s[i++];
while(j<=end) temp[k++] = s[j++];
for(int i = begin,k = 0;i<=end;i++,k++)
{
s[i] = temp[k];
}
delete[] temp;
}
void mergesort(int s[],int begin,int end)
{
if(begin>=end) return;
int mid = begin+(end-begin)/2;
mergesort(s,begin,mid);
mergesort(s,mid+1,end);
mergeArray(s,begin,end,mid);
}
main()
{
int s[] = {7,2,5,7,1,6,0};
int n = sizeof(s)/sizeof(int);
mergesort(s,0,n-1);
for(int i = 0;i<n-1;i++)
cout<<s[i]<<endl;
cout<<n;
return 0;
}