算法不多说,Divide and Conquer:将序列分为两个分别排序,然后归并到一起。
代码:
package com.zxy.algorithm;
public class MergeSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] 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), 是稳定排序。