主要关注一下非递归版本,其实就是模拟了从长度为1的子段,不断长度翻倍,一直到最后为全长的过程。】
归并的思想是:
1.将原数组首先进行两个元素为一组的排序,然后合并为四个一组,八个一组,直至合并整个数组;
2.合并两个子数组的时候,需要借助一个临时数组,用来存放当前的归并后的两个数组;
3.将临时数组复制回原数组对应的位置。
代码中最后将tmp数组中的值写回原数组中。(注意归并为稳定的排序方法!)
package mergesort;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//归并排序的非递归算法
public class MergeSort{
public static void main(String args[]){
MergeSort mer = new MergeSort();
int[] array = mer.getArray();
System.out.println("OriginalArray:" + Arrays.toString(array));
mer.mergeSort(array);
System.out.println("SortedArray:" + Arrays.toString(array));
}
public int[] getArray(){
Scanner cin = new Scanner(System.in);
System.out.print("Input the length of Array:");