//归并 O(n*log(n)) 80000-0.031s
//先分后治
void Merge(int arr[], int left, int mid, int right, int temp[])
{
int l = left;
int r = mid + 1;
int t = 0;
while (l <= mid && r <= right)
{
if (arr[l] <= arr[r])
{
temp[t] = arr[l];
t += 1;
l += 1;
}else
{
temp[t] = arr[r];
t += 1;
r += 1;
}
}
while (l <= mid)
{
temp[t] = arr[l];
t += 1;
l += 1;
}
while (r <= right)
{
temp[t] = arr[r];
t += 1;
r += 1;
}
t = 0;
int templeft = left;
cout << "------" << endl;
while (templeft <= right)
{
arr[templeft] = temp[t];
cout << arr[templeft] << endl;
t += 1;
templeft += 1;
}
}
void MergeSort(int arr[], int left, int right, int temp[])
{
if (left < right)
{
int mid = (left + right) / 2;
cout <<"mid="<< mid << endl;
MergeSort(arr, left, mid, temp);
MergeSort(arr, mid + 1, right, temp);
Merge(arr, left, mid, right, temp);
}
}
int main()
{
//srand((unsigned int)time(NULL));
//default_random_engine e;
//uniform_real_distribution<double>u(0, 1);
//int arr[80000];
//int temp[80000];
//for (int i = 0; i < 80000; i++)
//{
// arr[i] = u(e) * 800000;
//}
int arr[] = { 8,9,1,7,2,3,5,4,6,0 };
int temp[10];
int left = 0;
int right = 9;
MergeSort(arr, left, right, temp);
//start = clock();
//MergeSort(arr, 0, 79999, temp);
//stop = clock();
//duration = ((double)(stop - start)) / CLK_TCK;
//cout << duration << endl;
for (int i = left; i <= right; i++)
{
cout << arr[i] << " ";
}
system("pause");
return 0;
}