• 归并排序


     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 }

  • 相关阅读:
    linux下SVN迁移
    hive-site.xml
    5.扩展 GROUP BY
    4.锁——避免重复启动同一程序
    1.执行计划探究(一)
    1.日期_星期
    3.放弃CHAR吧,在铸成大错之前!
    2.NULL 的问题
    1.ORACLE 尽量不使用隐式转换
    webservice
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/14227683.html
Copyright © 2020-2023  润新知