java--归并排序算法2.0

归并排序算法2.0( Merge sort)

算法最好最坏平均空间稳定性 
递归 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



posted @ 2021-12-15 23:13  Open_xing  阅读(31)  评论(0)    收藏  举报