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

    归并排序算法可以递归的描述为:算法将数组分为两半,对每部分递归地应用归并排序。在两部分都排好序后,对它们进行归并。

    package ss.sort; /** * 归并排序 * @author zhangss 2016-4-26 14:06:04 * */ public class MergeSort { /** * @param args */ public static void main(String[] args) { int[] list = {2, 3, 2, 5, 6, 1, -2, 3, 4, 14, 12}; mergeSort(list); for(int temp : list) System.out.println(temp); } public static void mergeSort(int[] list){ if(list.length>1){ // marge sort the first half int[] firstHalf = new int[list.length/2]; System.arraycopy(list, 0, firstHalf, 0, list.length/2); mergeSort(firstHalf); // marge sort the secode half int secondHalfLength = list.length - list.length/2; int[] secondHalf = new int[secondHalfLength]; System.arraycopy(list, list.length/2, secondHalf, 0, secondHalfLength); mergeSort(secondHalf); //Merge firstHalf with secondHalf int[] temp = merge(firstHalf, secondHalf); System.arraycopy(temp, 0, list, 0, temp.length); } } /** Merge two sorted lists */ private static int[] merge(int[] list1, int[] list2){ int[] temp = new int[list1.length + list2.length]; int current1 = 0; // Current index in list1 int current2 = 0; // Current index in list2 int current3 = 0; // Current index in temp while(current1<list1.length && current2 < list2.length){ if(list1[current1] < list2[current2]){ temp[current3++] = list1[current1++]; }else{ temp[current3++] = list2[current2++]; } } while(current1 < list1.length){ temp[current3++] = list1[current1++]; } while(current2 < list2.length){ temp[current3++] = list2[current2++]; } return temp; } }

      

  • 相关阅读:
    pl/sql developer中如何导出oracle数据库结构? 参考文章一
    ORACLE知识点整理之一
    WebService之第一天
    Eclipse中,open declaration;open implementation;open super implementation的区别
    Maven 手动添加 JAR 包到本地仓库
    clipse maven 项目 出现红色叹号 解决方法
    eclipse快捷键设置
    Hibernate3--快速入门--第一天
    C++ 虚函数表解析
    c++ primer复习(二)
  • 原文地址:https://www.cnblogs.com/zsslll/p/5454388.html
Copyright © 2011-2022 走看看