算法学习-归并排序

  • * 思想
  • * 图解
  • * java code
  • * 结语

* 思想

       归并排序的核心思想:将两个有序的数列进行合并,那么如何获得有序的数列便值得我们思考了,如果一个序列中只有一个元素那便是有序的,这里我们用到了分治的思想;我们将其合并,形成一个相对的有序的数列,在这个过程中我们用到了递归;这时我们将小队列逐次合并,便得到最终有序的数列。


* 图解

       上面的话,小编认为着实有些绕口和生硬,于是想要通过一个具体的demo描述一下获得有序的数列,同时如何逐次合并的过程。(小编认为这张图是本博文的精髓)

算法学习-归并排序_第1张图片

       对原数组进行排序,我们的执行顺序按照红色编号,从1-25,其中体现分治和递归的思考。虽然我们描述中说的是程序先分解,再归并,但实际过程是一边分解一边归并,前半部分分先排好序,后半部分再排,最后整个归并为一个完整的序列,整个过程就像一个动态的树,执行顺序就是对树的先序遍历顺序。


* java code

       将理论落实下来最好的办法便是把你所想的用代码体现出来,代码如下,欢迎大家赏读(赏脸阅读)

/**
 * 归并排序合并--lyw--2018年8月30日15:34:05
   * @param b
   * @param begin
   * @param middle
   * @param end
   */
   public void merge(int[] b,int begin,int middle,int end){
      int i=0;
      int j=0;

      int[] left= Arrays.copyOfRange(b,begin,middle+1);
      int[] right=Arrays.copyOfRange(b,middle+1,end+1);

      int k=begin;
      while ((iif (left[i]else  {
              b[k++]=right[j];
              j++;
          }
      }

      if (iif (j/**
   * 归并排序--lyw--2018年8月30日15:46:39
   * @param b
   * @param begin
   * @param end
   */
   public void mergeSort(int[] b,int begin,int end){
      if (beginint middle=(begin+end)/2;
          mergeSort(b,begin,middle);
          mergeSort(b,middle+1,end);
          merge(b,begin,middle,end);
      }
   }

  /**
   * 测试归并排序--lyw--2018年8月30日15:49:25
   */
  @Test
   public void testMerge(){
       mergeSort(arr,0,8);
      //打印结果
      System.out.print("归并排序的结果:");
      for (int i=0;i", ");
      }
   }

* 结语

       愿每一次的分享都会结果,自己接触到的东西也要有一个颗粒归仓,今天的对算法又熟悉了一些。

       感谢您宝贵的阅读时间。

你可能感兴趣的:(——【算法】,✿,计算机)