归并排序的思想:采用递归,将大数组划分为若干个小数组,进行各自的排序然后将各个小数组之间归并排序,最后对整个数组排序,划分数组的方法是采用一分为二平均分的原则,本算法是按升序排列,具体Java代码实现如下所示:
public class MergeSort {
public void mergeSort(int[] array,int left,int right){
if (left<right){
int mid=(left+right)/2;
mergeSort(array,left,mid);
mergeSort(array,mid+1,right);
merge(array,left,mid,right);
}
}
private void merge(int[] array, int left, int mid, int right) {
int[] newArray=new int[array.length];
int temp=left;
int star=mid+1;
int k=left;
//比较两部分的元素
while(left<=mid&&star<=right){
if (array[left]<=array[star]){
newArray[k++]=array[left++];
}else{
newArray[k++]=array[star++];
}
}
//将左边的未遍历的元素依次放入新的数组中
while (left<=mid){
newArray[k++]=array[left++];
}
//将右边未遍历的元素依次放入数组中
while(star<=right){
newArray[k++]=array[star++];
}
//将排好序的元素放入到原来的数组中
while (temp<=right){
array[temp]=newArray[temp++];
}
}
public static void main(String[] args){
MergeSort mergeSort=new MergeSort();
int[] array=new int[]{90,3,2,67,44,-9,87,65,11,9,2,8};
mergeSort.mergeSort(array,0,array.length-1);
for (int arr:array) {
System.out.println(arr);
}
}
}