zoukankan      html  css  js  c++  java
  • 数据结构--递归实现归并排序

     1 /*通过递归实现归并排序
     2  * 具有思路:将要排序的数组不断划分,直到只有一个元素的时候停止;
     3  * 这是递归的基准条件,返回进行排序。
     4  * 归并排序的时间复杂度:O(NlogN):考虑的是复制数据到workarr和workarr到arr的次数
     5  * 
     6  * */
     7 public class MergeWithRecursion {
     8     static int items = 6;
     9     static int[] arr = {10,8,9,59,2,4};
    10     public static void main(String[] args) {
    11         display();
    12         mergeSort();
    13         display();
    14 
    15     }
    16     
    17     public static void mergeSort(){
    18         int[] workarr = new int[items];
    19         recMergeSort(workarr,0,items-1);
    20     }
    21 
    22     private static void recMergeSort(int[] workarr, int low, int high) {
    23         if(low == high){
    24             return;
    25         }
    26         else{
    27             int mid = (low + high) / 2;
    28             recMergeSort(workarr,low,mid);
    29             recMergeSort(workarr,mid+1,high);
    30             merge(workarr,low,mid+1,high);
    31         }
    32         
    33     }
    34 
    35     private static void merge(int[] workarr, int low, int mid, int high) {
    36         //workarr index
    37         int j = 0;
    38         int lowbound = low;
    39         int midindex = mid - 1;
    40         int n = high - lowbound + 1;
    41         //进行归并到工作区数组
    42         while(low <= midindex && mid <= high){
    43             if(arr[low] < arr[mid]){
    44                 workarr[j++] = arr[low++];
    45             }
    46             else{
    47                 workarr[j++] = arr[mid++];
    48             }
    49         }
    50         
    51         while(low <= midindex){
    52             workarr[j++] = arr[low++];
    53         }
    54         
    55         while(mid <= high){
    56             workarr[j++] = arr[mid++];
    57         }
    58         
    59         //将工作区部分有序的数组复制到原来的数组
    60         for(int i = 0; i < n;i++){
    61             arr[lowbound + i] = workarr[i];
    62         }
    63     }
    64     
    65     public static void display(){
    66         for(int i = 0; i < arr.length;i++){
    67             System.out.print(arr[i] + " ");
    68         }
    69         System.out.println();
    70     }
    71 
    72 }
  • 相关阅读:
    名词解释字节码
    一次Java解析数独的经历
    Java运行时数据区域
    java中的泛型类和泛型方法
    兼容的一些问题
    js中变量的作用域
    CSS3渐变
    Extjs散记
    Linux系统CentOS下mysql的安装日志
    修改自动亮度下背光和按键的亮度
  • 原文地址:https://www.cnblogs.com/sun1993/p/7820073.html
Copyright © 2011-2022 走看看