<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 如何實現歸并排序

    時間:2025-11-11 13:55:03 php語言

    如何實現歸并排序

      歸并排序的時間復雜度是:nlogn,如何實現歸并排序呢?下面是小編給大家提供的算法,大家可以參考閱讀,更多詳情請關注應屆畢業生考試網。

      歸并排序的時間復雜度是:nlogn,主要是用到二路歸并排序,也就是把兩個有序集合合并為一個有序集合.

      遞歸二路歸并排序的算法:

      代碼片段(1)

      view sourceprint;

      package algorithm;

      public class MergeSort {

      /pic/p>

      /**

      * <pre>

      * 二路歸并

      * 原理:將兩個有序表合并和一個有序表

      * </pre>

      *

      * @param a

      * @param s

      *            第一個有序表的起始下標

      * @param m

      *            第二個有序表的起始下標

      * @param t

      *            第二個有序表的結束小標

      *

      */

      private static void merge(int[] a, int s, int m, int t) {

      int[] tmp = new int[t - s + 1];

      int i = s, j = m, k = 0;

      while (i < m && j <= t) {

      if (a[i] <= a[j]) {

      tmp[k] = a[i];

      k++;

      i++;

      } else {

      tmp[k] = a[j];

      /pic/p>

      j++;

      k++;

      }

      }

      while (i < m) {

      tmp[k] = a[i];

      i++;

      k++;

      }

      while (j <= t) {

      tmp[k] = a[j];

      j++;

      k++;

      }

      System.arraycopy(tmp, 0, a, s, tmp.length);

      }

      /**

      *

      * @param a

      * @param s

      * @param len

      *            每次歸并的有序集合的長度

      */

      public static void mergeSort(int[] a, int s, int len) {

      int size = a.length;

      int mid = size / (len << 1);

      int c = size & ((len<<1) - 1);

      /pic/pic/p>

      if (mid == 0)

      return;

      /pic/pic/p>

      for (int i = 0; i < mid; ++i) {

      s = i * 2 * len;

      merge(a, s, s + len, (len << 1) + s - 1);

      }

      /pic/pic/p>

      if (c != 0)

      merge(a, size - c - 2 * len, size - c, size - 1);

      /pic/p>

      /pic/p>

      /pic/p>

      /pic/p>

      /pic/p>

      /pic/pic/p>

      mergeSort(a, 0, 2 * len);

      }

      public static void main(String[] args) {

      /pic/p>

      int[] a = new int[] { 4, 3, 6, 1, 2, 5};

      mergeSort(a, 0, 1);

      for (int i = 0; i < a.length; ++i) {

      System.out.print(a[i] + " ");

      }

      /pic/n" + sum);

      }

      }

    【如何實現歸并排序】相關文章:

    C語言實現歸并排序算法02-04

    C語言實現歸并排序算法實例07-13

    C語言實現歸并排序算法實例分析01-25

    C++實現自底向上的歸并排序算法03-14

    C++實現自頂向下的歸并排序算法12-21

    php如何實現快速排序09-11

    C++歸并排序算法實例02-09

    內部排序之堆排序的實現02-21

    分析php選擇排序法實現數組排序的方法12-13

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人