
排序完的数组出现0,-1,和原来的数组不同,为什么会这样呢?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <memory.h>
//归并排序:
/*
arr:指定数组
left:判定左边界
right:判断右边界
mid:判断中点
*/
void Merge(int* arr, int left, int right, int mid)
{
int *p = (int*)malloc((right - left + 1) * sizeof(int));
int *temp = p;
memset(p, 0, (right - left + 1) * sizeof(int));
int L = left;
int R = mid + 1;
while (L <= mid && R <= right)
{
*p++ = arr[L] < arr[R] ? arr[L++] : arr[R++];
}
while (L <= mid)
{
*p++ = arr[L++];
}
while (R <= right)
{
*p++ = arr[R++];
}
memcpy(arr + left, temp, (right - left + 1) * sizeof(int));
free(temp);
temp = NULL;
}
void MergeSort(int* arr, int left, int right)
{
if (left == right)
return;
int mid = left + ((right - left)>>1);
MergeSort(arr, left, mid); //左半边
MergeSort(arr, mid + 1, right); //右半边
Merge(arr, left, right, mid); //排序
}
int main()
{
int arr[10] = { 9,8,3,5,2,1,6,4,7,10};
MergeSort(arr, 0, sizeof(arr)/ sizeof(arr[0]) - 1);
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}