Java实现排序算法之合并排序
数组左半部分先进行分治,再对右半部分进行分治。
分:拆分成一个个元素
治:进行合并,谁小就先把谁放进temp临时数组里。
时间复杂度O(nlogn)
import java.util.Arrays;
public class MergeSort {
static int count = 0;
public static void mergeSort(int[] data){
int[] temp = new int[data.length];
mergeSort(data,0,data.length-1,temp);
}
public static void mergeSort(int[] data, int start, int end, int[] temp){
if (start<end) {
int mid = (start + end) / 2;
mergeSort(data, start, mid,temp);
mergeSort(data, mid+1, end,temp);
merge(data,start,mid,end,temp);
System.out.println("merge: "+Arrays.toString(temp));
}
}
private static void merge(int[] data, int start,int mid, int end, int[] temp){
int i = start;
int j = mid+1;
int t = 0;
while (i<=mid && j<=end){
if (data[i]<=data[j]){
temp[t++] = data[i++];
}else {
temp[t++] = data[j++];
}
}
while (i<=mid){
temp[t++] = data[i++];
}
while (j<=end){
temp[t++] = data[j++];
}
t = 0;
while (start<=end){
data[start++] = temp[t++];
}
}
public static void main(String[] args) {
int[] test = new int[]{6,5,4,3,2,1};
mergeSort(test);
System.out.println(Arrays.toString(test));
}
}