自学内容网 自学内容网

八大排序--07归并排序

假设数组 arr[]= {5,7,4,2,0,1,6},请通过插入排序的方式,实现从小到大排列:
方法:先拆分,再合并,并在合并过程中结束临时空间进行排序;

拆分:从待排序列中间位置拆开,数据分成左右两部分,继续进行拆分,直至数据拆分成一个一个的时候停止

完整代码:

package Java.start;

import java.util.Arrays;

public class MergeSort {
//归并排序
public static void main(String[] args) {
int[] arr= {5,7,4,2,0,1,6};
merge_sort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}

public static void merge_sort(int[] arr,int left,int right) {

if(left==right) {
return;//递归出口
}else {
int mid=(left+right)/2;
merge_sort(arr,left,mid);//向左拆分
merge_sort(arr, mid+1, right);//向右拆分

merge(arr, left, right, mid);//合并
}

}


public static void merge(int[] arr,int left,int right,int mid) {
//记录两段的开始位置
int s1=left;
int s2=mid+1;

int[] temp=new int[right-left+1];//定义临时空寂temp
int index=0;//定义游标遍历的临时空间
//判断s1和s2指向数据的大小,将其存入临时数据
while(s1<=mid&&s2<=right) {
if(arr[s1]<arr[s2]) {
temp[index]=arr[s1];
s1++;
index++;
}else {
temp[index]=arr[s2];
s2++;
index++;
}
}
while(s1<=mid) {//判断s1中是否有数据,若有则将其存入临时数组
temp[index]=arr[s1];
s1++;
index++;
}
while(s2<=right) {//判断s2中是否有数据,若有则将其存入临时数组
temp[index]=arr[s2];
s2++;
index++;
}

for(int j=0;j<temp.length;j++) {
arr[left+j]=temp[j];
}
}



}

结果:


原文地址:https://blog.csdn.net/m0_74977981/article/details/142767410

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!