首先在讲归并排序前,先看一下各种排序方法的比较
归并排序的基本思想:将两个有序表合并成一个有序表。
package com.paixu.suanfa;
/**
*
* @author 周颖
* @date 2017年10月5日 下午9:17:13
* @Decription 归并排序
*/
public class MergeSort {
public static void mergeSort(int[] data){
sort(data, 0, data.length-1);
}
//将索引从left到right范围的数组元素进行归并排序
private static void sort(int[] data,int left,int right){
if (left < right) {
//找出中间索引
int center = (left+right)/2;
sort(data, left, center);
sort(data, center+1, right);
//合并
merger(data, left, center, right);
}
}
//将两个数组进行归并,归并前
private static void merger(int[] data,int left,int center,int right){
int[] tempData= new int[data.length];
int mid = center+1;
int third = left;
int temp = left;
while(left<=center && right>=mid){
if (data[left] <= data[mid] ) {
tempData[third++] = data[left++];
}else {
tempData[third++] = data[mid++];
}
}
while(mid <= right){
tempData[third++] = data[mid++];
}
while(left <= center){
tempData[third++] = data[left++];
}
while(temp <= right){
data[temp] = tempData[temp++];
}
}
public static void main(String[] args) {
int[] data = {10,2,5,6,9,75,20,1,3};
mergeSort(data);
for (int i : data) {
System.out.println(i);
}
}
}