《算法 - 归并排序》

一:归并算法核心

  - 将已有序的子序列合并,得到完全有序的序列;

  - 即先使每个子序列有序,再使子序列段间有序。

  - 若将两个有序表合并成一个有序表,称为二路归并。

  - 总结

    - 将两个已排好序的数组合并成一个有序的数组,称之为归并排序

二:工作原理

  • 归并操作的工作原理如下:
    第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
    
    第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
    
    第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
    
    重复步骤3直到某一指针超出序列尾
    
    将另一序列剩下的所有元素直接复制到合并序列尾

三:代码

  • 1:现在我有两个已经排好顺序的数组:int[] arr1 = {2, 7, 8}和int[] arr2 = {1, 4, 9},我还有一个大数组来装载它们int[] arr = new int[6];
       
    现在,我将两个数组的值进行比较,谁的值比较小,谁就放入大数组中!
    
    2:首先,拿出arr1[0]和arr2[0]进行比较,显然是arr2[0]比较小,因此将arr2[0]放入大数组中,同时arr2指针往后一格
    
    所以,现在目前为止arr = {1}
    
    3:随后,拿arr1[0]和arr2[1]进行比较,显然是arr1[0]比较小,将arr1[0]放入大数组中,同时arr1指针往后一格
    
    所以,现在目前为止arr = {1,2}
    
    4:随后,拿arr1[1]和arr2[1]进行比较,显然是arr2[1]比较小,将arr2[1]放入大数组中,同时arr2指针往后一格
    
    所以,现在目前为止arr = {1,2,4}
    
    ........
    
    遍历到最后,我们会将两个已排好序的数组变成一个已排好序的数组arr = {1,2,4,7,8,9}

5:Leet code

  - Leet code

猜你喜欢

转载自www.cnblogs.com/25-lH/p/10471966.html