zoukankan      html  css  js  c++  java
  • 排序算法之------归并排序

    归并算法: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。

    时间复杂度为 O(NlogN) ,空间复杂度为 O(n)

     1 public class Merge {
     2 
     3     private static int[] copy; 
     4 
     5     public static void sort(int[] array){
     6         copy = new int[array.length];
     7         sort(array, 0, array.length -1);
     8     }
     9 
    10     private static void sort(int[] array, int start, int end) {
    11         //将数组排序
    12         if(end <= start) return;
    13         int mid = start + (end - start) /2;
    14         sort(array, start, mid); //将左边数组排序
    15         sort(array, mid + 1, end);//将右边的数组排序
    16         merge(array, start, mid, end);//归并方法
    17     }
    18 
    19     /**
    20      * 排序
    21      * @param array 需要排序的数组
    22      * @param start 数组的起始位置
    23      * @param mid 数组的中间位置
    24      * @param end 数组的结束位置
    25      */
    26     private static void merge(int[] array, int start, int mid, int end) {
    27         int i = start, j = mid+1;
    28         for(int k = start; k <= end; k++){ //复制数组
    29             copy[k] = array[k];
    30         }
    31 
    32         for(int k = start; k <= end; k++){
    33             if(i > mid) array[k] = copy[j++]; //当只剩下右边数组
    34             else if (j > end) array[k] = copy[i++]; //当只剩下左边数组
    35             else if (copy[i] <= copy[j]) array[k] = copy[i++]; 
    36             else array[k] = copy[j++];
    37         }
    38     }
    39 }

    测试代码:

     1 public class MergeTest {
     2 
     3     public static void main(String args[]){
     4         int[] array = new int[] {9,5,3,4,89,14,24,56,3,78,45};
     5         Merge.sort(array);
     6         for(int i : array){
     7             System.out.print(i + " ");
     8         }
     9     }
    10 }

     

     

  • 相关阅读:
    P2730 魔板 Magic Squares
    P2124 奶牛美容
    4. Median of Two Sorted Arrays(Array; Divide-and-Conquer)
    3.Longest Substring Without Repeating Characters(string; HashTable)
    2.Add Two Numbers (List)
    1.Two Sum (Array; HashTable)
    C++中的浅拷贝、深拷贝、智能指针
    C++ 静态数据成员和静态成员函数
    C & C++ 宏与const
    C++指针与引用
  • 原文地址:https://www.cnblogs.com/huangyichun/p/6086862.html
Copyright © 2011-2022 走看看