Algorithm——MergeSort

来源:互联网 发布:VH软件 编辑:程序博客网 时间:2024/06/05 10:31

算法不多说,Divide and Conquer:将序列分为两个分别排序,然后归并到一起。

代码:

package com.zxy.algorithm;public class MergeSort {public static void main(String[] args) {// TODO Auto-generated method stubint[] array = {1, 14, 8, 3, 6, 10, 5, 7, 2, 9, 11, 13, 4};mergeSort(array, 0, array.length - 1);}static int[] mergeSort(int[] array, int start, int end){int length = end - start + 1;if(length <= 1);else if(length == 2){if(array[start] > array[end]){int temp = array[end];array[end] = array[start];array[start] = temp;}}else {int mid = start + (length / 2);array = mergeSort(array, start, mid - 1);array = mergeSort(array, mid, end);array = merge(array, start, mid, end);}return array;}static int[] merge(int[] array, int start, int mid, int end){int[] data = new int[array.length];int i = start;int j = mid;int pos = start;while(i < mid && j <= end){if(array[i] < array[j])data[pos++] = array[i++];else {data[pos++] = array[j++];}}if(i == mid){while(j <= end)data[pos++] = array[j++];}else{while(i < mid)data[pos++] = array[i++];}for(int p = start; p <= end; p++){array[p] = data[p];}for (int k : array) {System.out.print(k + " ");}System.out.println();return array;}}

很重要的算法。

时间复杂度:O(nlogn), 是稳定排序。

0 0