归并排序

来源:互联网 发布:算法竞赛宝典 百科 编辑:程序博客网 时间:2024/06/15 14:01

        归并排序基本思想:假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为1或2的有序序列,再两两归并,直到得到一个长度为n的有序序列为止,这种排序算法称为二路归并排序算法.

        完整代码:

package cn.ccnu.sort;public class Merge {public static void mergeSort(int[] data, int start, int end){int middle = 0;if(start < end){middle = (start+end)/2;mergeSort(data, start, middle);mergeSort(data, middle+1, end);combine(data, start, middle, end);}}public static void combine(int[] data, int start, int middle, int end){int length = end-start+1; // 长度int[] temp = new int[length]; // 构建一个临时数组int i = start; // 指向前半部分的指针int j = middle+1; // 指向后半部分的指针int t = 0; // 指向临时数组的指针while(i<=middle && j<=end){if(data[i] < data[j]){ temp[t++] = data[i++];}else{temp[t++] = data[j++];}}// 可能会出现某个部分没比较完while(i<=middle){temp[t++] = data[i++];}while(j<=end){temp[t++] = data[j++];}// 把临时数组中的数赋值到data数组中去t = start; // 将t重新置为0for(int m=0; m<temp.length; m++, t++){data[t] = temp[m];}}public static void main(String[] args) {int[] data = {10, 3, 12, 5, 4, 9, 4, 7, 6};mergeSort(data, 0, data.length-1);for (int i : data) {System.out.print(i + "  ");}}}

0 0
原创粉丝点击