欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 八大排序--07归并排序

八大排序--07归并排序

2024/10/26 13:34:53 来源:https://blog.csdn.net/m0_74977981/article/details/142767410  浏览:    关键词:八大排序--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];//定义临时空寂tempint 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];}}}

结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com