您的位置:首页 > 编程语言 > Java开发

Java排序算法——归并排序

2017-10-11 19:44 399 查看
归并排序

基本原理:归并排序就是将若干个已经排好序的部分合并成一个有序部分。顺序比较两者相应的元素,小者移入到另一个表中,反复如此即不断地进行递归分解、合并。

时间效率:O(nlog2n)

空间效率:O(n)

算法稳定性:稳定

public class Main{
public static void main(String[] args) {
int num[] = {1,5,78,4,35,35,358,35,55,63};
mergeSort(num);
System.out.println(java.util.Arrays.toString(num));
}
//归并排序
public static void mergeSort(int []num){
sort(num,0,num.length-1);
public static void sort(int[]num,int left,int right){
if(left<right){
int center = (left+right)/2;
sort(num,left,center);
sort(num,center+1,right);
merge(num,left,center,right);
}
}
public static void merge(int[]num,int left,int center,int right){
int tempArr[] = new int[right-left+1];
int i = left;//左指针
int j = center+1;//右指针
int k = 0;
//将较小的数移入数组
while(i<=center && j<=right){
if(num[i]<num[j]){
tempArr[k++] = num[i++];
}else{
tempArr[k++] = num[j++];
}
}
//将左边剩余的数移入数组中
while(i<=center){
tempArr[k++] = num[i++];
}
//将右边剩余的数移入数组
while(j<=right){
tempArr[k++] = num[j++];
}
//覆盖原数组
for(int kk = 0;kk<tempArr.length;kk++){
num[kk+left] = tempArr[kk];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java排序算法