归并排序

#include<iostream>

using namespace std;

const int SIZE = 100;

int arr[SIZE];

void mergeSort(int fir,int end)

{

//当子序列就只有一个元素的时候就弹出

if(fir==end)return;

//分治

int mid = (fir+end)/2;

mergeSort(fir,mid);

mergeSort(mid+1,end);

//合并

int tempArr[SIZE];

int fir1=fir,fir2=mid+1;

for(int i=fir;i<=end;i++)

{

if(fir1>mid)

tempArr[i]=arr[fir2++];

else if(fir2>end)

tempArr[i]=arr[fir1++];

else if(arr[fir1]>arr[fir2])

tempArr[i]=arr[fir2++];

else 

tempArr[i]=arr[fir1++];

}

for(int i=fir;i<=end;i++)

arr[i]=tempArr[i];

}

int main()

{

//测试

int n;cin>>n;

for(int i=0;i<n;i++)cin>>arr[i];

mergeSort(0,n-1);

for(int i=0;i<n;i++)cout<<arr[i]<<" ";

cout<<endl;

return 0;

}

你可能感兴趣的:(归并排序)