算法 | 最好 | 最坏 | 平均 | 空间 | 稳定性 | |
---|---|---|---|---|---|---|
递归 | nlog2n | nlog2n | nlog2n | n | 稳定 |
import java.util.Arrays; public class Marge { //递归算法Recursion algorithm public static void main(String[] args) { int[] arr={1,4,7,8,3,6,9}; //{5,9,11,12,17,21,31,3,4,6,9,10}; System.out.print("原序列输出:"); System.out.println(Arrays.toString(arr)); System.out.print("排序的结果:"); sort(arr, 0, arr.length-1); print(arr); } static void sort(int[] arr,int left,int rigth){ if(left==rigth)return; //数组中间值 int mid = left+(rigth-left)/2; //左边排序 sort(arr, left, mid); //右边排序 sort(arr, mid+1, rigth); marge(arr, left, mid+1, rigth); } static void marge(int[] arr,int leftptr,int rigthptr,int certerptr){ int[] temp = new int[certerptr-leftptr+1]; int mid= rigthptr-1; int i=leftptr; int j=rigthptr; int k=0; while(i<=mid&&j<=certerptr){ if(arr[i]<arr[j]) { temp[k++]=arr[i++]; }else{ temp[k++]=arr[j++]; } } while(i<=mid)temp[k++]=arr[i++]; while(j<=certerptr)temp[k++]=arr[j++]; for(int m=0;m<temp.length;m++){ arr[leftptr+m]=temp[m]; } } static void print(int[] arr){ for(int i=0;i<arr.length;i++){ System.out.print(" "+arr[i]); } } }
结果打印如下:
原序列输出:[1, 4, 7, 8, 3, 6, 9]排序的结果: 1 3 4 6 7 8 9