算法思想
利用归并的思想实现的排序方法。它的原理是假设初始序列有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。
代码实现(递归式)
void merging(int *list1, int list1_size, int *list2, int list2_size) {
int i, j, k, m;
int temp[MAXSIZE]; //数组最大值
i = j = k = 0;
while(i < list1_size && j < list2_size) {
if(list1[i] < list2[i]) {
temp[k++] = list1[k++];
}
else {
temp[k++] = list2[k++];
}
}
while(i < list1_size) {
temp[k++] = list1[i++];
}
while(i < list2_size) {
temp[k++] = list2[i++];
}
for(m = 0; m < list1_size + list2_size; m++) {
list1[m] = temp[m];
}
}
void MergeSort(int k[], int n) {
if(n > 1) {
//拆分
int *list1 = k;
int list_size = n / 2;
int *list2 = k + n / 2;
int list2_size = n - list1_size;
//递归
MergeSort(list1, list1_size);
MergeSort(list2, list2_size);
//合并
merging(list1, list1_size, list2, list2_size);
}
}