排序-->归并排序

归并排序

归并排序也称外部排序,是内存中的数据过大一般不能处理的情况下,我们选择用外部排序来解决,归并排序也是一种分治的思想,其实它就是把所要排序的内存空间一直二分下去,直到不能再分,然后又进行合并的一种排序方法;
排序-->归并排序_第1张图片
从上图中我们可以看到,其实归并排序也不是很难:

void MergeSort(int* array, int size)
{
    int* tmp = new int[size];   //创建外部空间
    for(size_t i =0; i < size; i++)
    {
        tmp[i] = array[i];
    }

    merge_sort(array tmp, 0, size-1);
    delete[] tmp;
}

void merge_sort(int* array, int* tmp, int begin, int end)
{
    assert(array);
    assert(tmp);
    if(begin == end)
        return;
    int mid = begin + (end-begin)>>1;
    int begin1 = begin;
    int end1 = mid;
    int begin2 = mid+1;
    int end2 = end;

    merge_sort(array, tmp, begin1, end1);   //进行左右递归
    merge_sort(array, tmp, begin2, end2);   

    int t = begin;
    while(begin1 <= end1 && begin2 <= end2)
    {
        if(array[begin1] > array[begin2])
            tmp[t++] = array[begin2++];
        else
            tmp[t++] = array[begin1++];
    }
    while(begin1 <= end1)//轮空的也要归并回去
    {
        tmp[t++] = array[begin1++];
    }
    while(begin2 <= end2)
    {
        tmp[t++] = array[begin2++];
    }
    for(int i =0; i <= end; i++)//拷回原来的空间中去
    {
        array[i] = tmp[i];
    }
}

你可能感兴趣的:(数据结构,归并排序)