归并排序


归并排序

视频教程

//归并排序
/*********************/
void merge(int arr[],int L,int M,int R){
    int left_size = M-L;
    int right_size = R-M+1;
    int left[left_size];
    int right[right_size]; //产生两个左右数组
    for (int i = L;i<M;i++){
        left[i-L] = arr[i];
    }
    for(int i = M;i<=R;i++){
        right[i-M] = arr[i];
    }
    int i =0,j = 0,k = L;
    while(i<left_size && j<right_size){ //数组比较那个小,就插入
        if(left[i]<right[j]){
            arr[k++] =left[i++];
        }
        else {
            arr[k++]=right[j++];
        }
    }
    while (i<left_size){
        arr[k++]=left[i++];
    }
    while(j<right_size){
        arr[k++]=right[j++];
    }
}

void merger_sort(int arr[],int L,int R){ //分治归并
    if(L==R){
        return ;
    }
    int M = (L+R)/2;
    merger_sort(arr,L,M);
    merger_sort(arr,M+1,R);
    merge(arr,L,M+1,R);
}
/*******************/

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
面试题51. 数组中的逆序对 面试题51. 数组中的逆序对
面试题51. 数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4]输出: 5 限制: 0 <= 数组长度 &
2020-05-07 anlen123
下一篇 
面试题59 - II. 队列的最大值 面试题59 - II. 队列的最大值
面试题59 - II. 队列的最大值请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和
2020-05-07 anlen123
  目录