归并排序 java实现

来源:互联网 发布:ubuntu配置keras环境 编辑:程序博客网 时间:2024/05/17 08:09
2.//归并排序采用的是分治算法:分治算法的基本思想是将一个规模为N的问题分解为K个规模//较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原//问题的解。 //分治法解题的一般步骤: //(1)分解,将要解决的问题划分成若干规模较小的同类问题; //(2)求解,当子问题划分得足够小时,用较简单的方法解决; //(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解//将一个含有n个序列的有序表看成是n个长度为1的有序表,然后两两归并,得到[n/2]个长//度为2的有序表,然后再两两归并,直到得到一个长度为n的有序表为止,归并排序的时间复//杂度为O(nlgn)//归并排序需要使用递归进行实现import java.util.Arrays;public class MegerSort {public static void main(String args[]){int[]a=new int[]{9,1,5,7,2,4,3,8,0,6};MegerSort mg=new MegerSort();mg.merger(a,0,a.length-1); System.out.println(Arrays.toString(a)); }private int[] merger(int[]b,int low,int high){int mid=(low+high)/2;if(low<high){this.merger(b, low, mid);this.merger(b, mid+1, high);this.sort(b,low,mid,high);}return b;}private void sort(int[]c,int low,int mid,int high){int[]d=new int[high-low+1];int index=0;int i=low,j=mid+1;while(i<=mid&&j<=high){if(c[i]<=c[j]){d[index++]=c[i++];}else{d[index++]=c[j++];}}while(j<=high){d[index++]=c[j++];}while(i<=mid){d[index++]=c[i++];}for(int m=0;m<d.length;m++){c[low+m]=d[m];}}}

0 0
原创粉丝点击