zoukankan      html  css  js  c++  java
  • 归并排序

     1 public class guiBing {
     2     private static void MergeSort(int[] a,int start,int end){
     3         if(start < end){
     4             //找分割位置
     5             int middle = (end + start) / 2;
     6             //递归分割下去,左边,右边
     7             MergeSort(a,start,middle);
     8             MergeSort(a,middle + 1,end);
     9             //该合并了
    10             merge(a,start,middle,end);
    11         }
    12     }
    13 
    14     public static void merge(int[] list,int start,int middle,int end){
    15         //leftLength和rightLength分别表示左边序列和右边序列的长度。左边从start开始包括middle,右边从middle+1开始
    16         int leftLength = middle - start + 1;
    17         int rightLength = end - middle;
    18         //定义俩个空的容器,将list分为左、右俩个序列,便于最后的排序
    19         int L[] = new int[leftLength];
    20         int R[] = new int[rightLength];
    21         //定义下标:L、R、list
    22         int lIndex = 0;
    23         int rIndex = 0;
    24         int listIndex = 0;
    25 
    26         //赋值 L 和 R
    27         for (lIndex = 0,listIndex = start; lIndex < leftLength; lIndex++,listIndex++) {
    28             L[lIndex] = list[listIndex];
    29         }
    30 
    31         for (rIndex = 0,listIndex = middle + 1; rIndex < rightLength; rIndex++,listIndex++) {
    32             R[rIndex] = list[listIndex];
    33         }
    34 
    35         //弟兄们,我要开始合体了,小的给我排前面去
    36         for(lIndex = 0,rIndex = 0,listIndex = start;
    37             lIndex < leftLength && rIndex < rightLength;
    38             listIndex++){
    39             //谁小谁先放进list中
    40             if(L[lIndex] <= R[rIndex]){
    41                 list[listIndex] = L[lIndex];
    42                 lIndex++;
    43             } else {
    44                 list[listIndex] = R[rIndex];
    45                 rIndex++;
    46             }
    47         }
    48         //将 L/R中 剩下的元素 放入 list,另外下面这俩个if,只会执行一个
    49         if(lIndex < leftLength){
    50             for (int tempIndex = lIndex; tempIndex < leftLength; tempIndex++,listIndex++) {
    51                 list[listIndex] = L[tempIndex];
    52             }
    53         }
    54 
    55         if(rIndex < rightLength){
    56             for (int tempIndex = rIndex; tempIndex < rightLength; tempIndex++,listIndex++) {
    57                 list[listIndex] = R[tempIndex];
    58             }
    59         }
    60     }
    61 
    62     public static void main(String[] args) {
    63         int i=0;
    64         int a[] = {5,4,9,8,7,6,0,1,3,2};
    65         int len = a.length;
    66         MergeSort(a,0,len-1);
    67         for(i=0; i<len; i++){
    68             System.err.print(a[i]+" ");
    69         }
    70     }
    71 }

  • 相关阅读:
    [MyBatis]最简MyBatis工程
    eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
    day48_项目管理学习笔记
    项目流程之失败的案例
    项目流程之婚礼流程
    day47_Maven学习笔记
    快还要更快,让PHP 7 运行更加神速
    Linux服务器时间同步
    Win10系统开启Linux Bash命令行
    红帽RHOP 8 发布一条龙方案
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/14227683.html
Copyright © 2011-2022 走看看