思路:归并排序是将两个有序序列合并为一个有序序列; 初始时 将数列进行拆分,使其成为有序序列。然后再合并各有序序列;
代码如下;
#include <stdio.h>
#include <stdlib.h>
void merge(int* arr, int start, int end,int mid, int*temp)
{
int i = start;
int j = mid+1; //两个组的起始位置;
int length = 0; //临时数组的长度;
while (i <= mid && j <= end)
{
if (arr[i] < arr[j])
{
temp[length] = arr[i];
i++;
length++;
}
else
{
temp[length] = arr[j];
j++;
length++;
}
}
while (i<=mid)
{
temp[length] = arr[i];
length++;
i++;
}
while (j<=end)
{
temp[length] = arr[j];
length++;
j++;
}
for (int i = 0; i < length; ++i)
{
arr[start + i] = temp[i];
}
}
void mergeSort(int* arr, int start, int end, int* temp)
{
if (start >= end)
{
return;
}
int mid = (start + end) / 2;
mergeSort(arr, start, mid, temp);
mergeSort(arr, mid+1, end, temp);
merge(arr, start, end, mid, temp);
}
int main()
{
int arr[9] = { 4, 3, 7, 9, 5, 8, 6, 5, 2 };
for (int i = 0; i < 9; ++i)
printf("%d ", arr[i]);
printf("\n");
printf("---------排序后-------\n");
int temp[9];
mergeSort(arr, 0, 8, temp);
//quickSort(arr, 0, 8);
for (int i = 0; i < 9; ++i)
printf("%d ", arr[i]);
printf("\n");
system("pause");
return 0;
}