#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
const int N = 10;
void mergeSort ( int *arr, int left, int mid, int right )
{
int i = left;
int j = mid + 1;
int t = 0;
int *temp = new int[right + 1];
while ( i <= mid && j <= right ) //小的放进临时数组
{
if ( arr[i] < arr[j] )
temp[t++] = arr[i++];
else
temp[t++] = arr[j++];
}
while ( i <= mid )
temp[t++] = arr[i++];
while ( j <= right )
temp[t++] = arr[j++];
t = 0;
while ( left <= right )//要小于等于因为要赋值rgiht+1次,比如arr[0-2],就是3次
arr[left++] = temp[t++];
delete []temp;
}
void sort ( int *arr, int left, int right )
{
if ( left < right )
{
int mid = ( left + right ) / 2;
sort ( arr, left, mid );
sort ( arr, mid+1, right );
mergeSort ( arr, left, mid, right );
}
}
int main()
{
srand ( time ( 0 ) );
int arr[N];
int i = 0;
while ( i < N )
{
arr[i++] = rand() % 100;
}
i = 0;
cout << "Original:" << endl;
while ( i < N )
{
cout << arr[i++] << " ";
}
cout << endl;
sort ( arr, 0, N - 1 );
i = 0;
cout << "Sort:" << endl;
while ( i < N )
{
cout << arr[i++] << " ";
}
return 0;
}
(递归的过程)