代码如下:
#include <stdio.h>
#define DATA_ARRAY_SIZE 10
typedef int DataType;
void DisplayArray(DataType data[], const int size)
{
for (int i = 0; i < size; i++) {
printf("%d ", data[i]);
}
printf("\n");
return;
}
void Merge(DataType src[], DataType temp[], int start, int mid, int end);
void MergeSort(DataType src[], DataType temp[], int start, int end);
int main()
{
DataType srcData[DATA_ARRAY_SIZE] = {3,2,4,6,9,1,21,43,29,59};
DataType temp[DATA_ARRAY_SIZE] = {0};
MergeSort(srcData, temp, 0, DATA_ARRAY_SIZE - 1);
DisplayArray(srcData, DATA_ARRAY_SIZE);
return 0;
}
void MergeSort(DataType src[], DataType temp[], int start, int end)
{
int mid;
if (start < end) {
mid = (start + end) / 2;
MergeSort(src, temp, start, mid);
MergeSort(src, temp, mid + 1, end);
Merge(src, temp, start, mid, end);
}
return;
}
void Merge(DataType src[], DataType temp[], int start, int mid, int end)
{
int i = start;
int j = mid + 1;
int k = start; //index of temp
while (i != mid + 1 && j != end + 1) {
if (src[i] <= src[j]) {
temp[k++] = src[j++];
} else {
temp[k++] = src[i++];
}
}
while (i != mid + 1) {
temp[k++] = src[i++];
}
while (j != end + 1) {
temp[k++] = src[j++];
}
for (i = start; i <= end; i++) {
src[i] = temp[i];
}
}