Merge Sort归并排序

来源:互联网 发布:织梦cmspath 编辑:程序博客网 时间:2024/04/28 21:49

归并排序采用递归的思想对数组进行排序,如下图所示:

首先对于一个数组A把它分成左右两部分L、R,对于L、R再进行分割,当L、R变成有序时,再进行归并操作最后得到有序的数组A。

关于归并的部分可以写出以下的伪代码:

C = output[length = n]

A = 1st sorted array[n / 2]

B = 2nd sorted array[n / 2]

i = 1  j = 1

for k = 1 to n

        if A[i] < B [j]

            C[k] = A[i]

            i++

        else 

            C[k] = B[j]

            j++

end

java代码如下:

public class MergeSort{public static void main(String[] args) {int [] array = {2,4,1,6,8,5,3,7};mergeSort(0, array.length-1,array);}private static void mergeSort(int low, int high, int[] array){if(low < high){int middle = low + (high - low)/2;mergeSort(low, middle, array);mergeSort(middle+1, high, array);merge(low, middle, high, array);}}private static void merge(int low, int middle, int high, int[] array){int [] helper = new int [array.length];for(int i=low; i<=high; i++)helper[i] = array[i];int i = low;    int j = middle + 1;    int k = low;        while (i <= middle && j <= high) {    if (helper[i] <= helper[j]) {        array[k] = helper[i];        i++;      }       else {        array[k] = helper[j];        j++;      }      k++;    }    while (i <= middle) {      array[k] = helper[i];      k++;      i++;    }    while (j <= high) {      array[k] = helper[j];      k++;      j++;    }}}

0 0
原创粉丝点击