归并排序

归并排序是建立在归并操作(Merging)上的一种排序方法,它是采用分治法的一个非常典型的应用。归并是指将两个或两个以上的有序表合并成一个新的更大的有序表,归并排序则是递归的先将待排序列分割成n个序列,然后从最小的有序序列(只含一个元素)开始不断调用归并操作进行合并直到最后都合并成一个大的完整的有序表为止。

归并排序的C/C++代码实现:

void merge(int array[], int low, int m, int high)
{
    int i, j, k;
    static int temp[ARRAY_SIZE];
    for (i = low, j = m + 1, k = 0; k < high - low + 1; ++k) {
        if (i > m) {
            temp[k] = array[j++];
            continue;
        }
        if (j > high) {
            temp[k] = array[i++];
            continue;
        }
        temp[k] = array[i] < array[j] ? array[i++] : array[j++];
    }
    for (k = 0; k < high - low + 1; ++k)
        array[low+k] = temp[k];
}

void merge_sort(int sort_array[], int low, int high)
{
    if (low < high) {
        int i = (low + high) / 2;
        merge_sort(sort_array, low, i);
        merge_sort(sort_array, i + 1, high);
        merge(sort_array, low, i, high);
    }
}

继续阅读