| 
 
 归并排序是很有意思的排序,将已有序的序列合并,从而得到完全一样的序列,即先使子序列有序再进行合并。  对于一个数组,左边left,右边right,我们取中点値mid,以此为基点进行分割,此过程可以使用递归来实现。  分割完毕后进行合并。     
   在经历分割之后,开始排序并合并。        
void Bsort(int* arr, int left, int right, int* tmp)
{
    if (left >= right)
    {
        return;
    }
    int mid = (left + right) / 2;
    Bsort(arr, left, mid, tmp);
    Bsort(arr, mid + 1, right, tmp);
    int begin1 = left, end1 = mid;
    int begin2 = mid + 1, end2 = right;
    int i = left;
    while (begin1 <= end1 && begin2 <= end2)
    {
        if (arr[begin1] < arr[begin2])
        {
            tmp[i++] = arr[begin1++];
        }
        else
        {
            tmp[i++] = arr[begin2++];
        }
    }
    while (begin1 <= end1)
    {
        tmp[i++] = arr[begin1++];
    }
    while (begin2 <= end2)
    {
        tmp[i++] = arr[begin2++];
    }
    for (i = left; i <= right; i++)
    {
        arr[i] = tmp[i];
    }
}
void Sort(int* arr, int left, int right)
{
    int len = right - 1;
    int* tmp;
    tmp = (int*)malloc(sizeof(int) * right);
    Bsort(arr, left, len, tmp);
    free(tmp);
}
 
                
                
                
        
    
 
 |