首页 > 技术文章 > 排序—归并排序

zsslll 2016-05-03 11:39 原文

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

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; } }

  

推荐阅读