排序算法——归并排序

来源:互联网 发布:知行英语综合教程下载 编辑:程序博客网 时间:2024/06/17 02:27

步骤:1.递归拆分,并对两个拆分的数组进行排序

    2.合并两个有序数组


时间复杂度为O(nlogn)


原理图:



代码实现:

package suanfa;public class Merge {private static int[] temp;public static void main(String[] args) {int[] a={1,7,8,9,2,3,4,5};Merge.sort(a, 0, a.length-1);for(int i=0;i<a.length;i++){System.out.print(a[i]+",");}}static void sort( int[] a,int first,int last){int mid=(last+first)/2; //以mid为中心 拆分两个数组if(last>first)  //递归条件{sort(a,first,mid);//排序左边数组sort(a,mid+1,last);//排序右边数组merge(a,first,mid,last);//合并两个数组}}static void merge(int[] a,int first,int mid,int last){int[] temp=new int[a.length];//创建临时数组int i=first,j=mid+1;//定义左指针和右指针for(int k=first;k<=last;k++){temp[k]=a[k];}for(int k=first;k<=last;k++){if(i>mid)  a[k]=temp[j++];if(j>last)a[k]=temp[i++];else if(less(temp[i],temp[j]))a[k]=temp[i++];else a[k]=temp[j++];}}static boolean less(int a,int b){return a<b;}static void exch(int[] a,int i,int j){int temp=a[i];a[i]=a[j];a[j]=temp;}}


原创粉丝点击