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

     1 package sort;
     2 //归并排序
     3 public class MergeSortTest {
     4     public static void main(String[] args){
     5         int[] data = new int[]{5, 3, 6, 2, 1, 9, 4, 8, 7};
     6         mergeSort(data);
     7         System.out.println("排序后的数组:");
     8         print(data);
     9     }
    10     
    11     public static void mergeSort(int[] data){
    12         sort(data, 0, data.length-1);
    13     }
    14     
    15     public static void sort(int[] data, int left, int right){
    16         if (left >= right)
    17             return;
    18         int center  = (left + right) / 2;
    19         sort(data, left, center);
    20         sort(data, center+1, right);
    21         merge(data, left, center, right);
    22         print(data);
    23     }
    24     
    25     public static void merge(int[] data, int left, int center, int right){
    26         //临时数组
    27         int[] tempArr = new int[data.length];
    28         //右边数组的第一个元素索引
    29         int mid = center + 1;
    30         //tempIndex记录临时数组的索引
    31         int tempIndex = left;
    32         //缓存左数组的第一个元素的索引
    33         int tmp = left;
    34         
    35         while(left <= center && mid <=right){
    36             if (data[left] <= data[mid]){
    37                 tempArr[tempIndex++] = data[left++];
    38             }else{
    39                 tempArr[tempIndex++] = data[mid++];
    40             }
    41         }
    42         
    43         //剩余部分依次放入临时数组(实际上两个while只会执行其中一个)
    44         while (mid <= right){
    45             tempArr[tempIndex++] = data[mid++];
    46         }
    47         
    48         while (left <= center){
    49             tempArr[tempIndex++] = data[left++];
    50         }
    51         
    52         //将临时数组中的内容拷贝回原数组中
    53         while (tmp <= right){
    54             data[tmp] = tempArr[tmp++];
    55         }
    56     }
    57     
    58     public static void print(int[] data){
    59         for(int i=0; i<data.length; i++){
    60             System.out.print(data[i]+" ");
    61         }
    62         System.out.println();
    63     }
    64 }
  • 相关阅读:
    SQLServer 备份和还原
    Ling To DataTable
    asp.net安全防范
    SQLServer 定时备份(一)
    asp.net网站安全常见问题与防范
    SQLServer 定时备份(二)
    flex大法:一网打尽所有常见布局
    BetterScroll源码阅读顺便学习TypeScript
    快速搭建一个代码在线编辑预览工具
    一个简单标注库的插件化开发实践
  • 原文地址:https://www.cnblogs.com/seasondaily/p/7830950.html
Copyright © 2011-2022 走看看