归并排序

归并排序  merge(a,lo,mid,hi);  //将子数组 a[lo...mid]  和 a[mid+1....hi] 归并 ,这里两个子数组是有序的;

代码:

 public static void merge(int[] a, int lo,int mid,int hi) {
		int i=lo;
		int j=mid+1;
		int[] aux=new int[hi-lo+1];
		for(int k=lo;k<=hi;k++) {
			aux[k]=a[k];
		}
		for(int k=lo;k<hi;k++) {
			if      (i>mid)        a[k]=aux[j++];
			else if (j>hi)         a[k]=aux[i++];
			else if (a[i]<a[j])    a[k]=aux[i++];
			else                   a[k]=aux[j++];
		}
}

i  是低指针 ; j 是高指针 

merge方法进行了四个判断: i>mid 左半边元素用尽,一直放右半边元素即可

                                               j>hi 右半边元素用尽,一直放左半边元素即可

                                              a[i]<a[j] 左边元素小于右边元素,放左边元素

                                              a[i]>a[j] 左边元素大于右边元素,放右边元素

 

上一篇:Keepalived+Haproxy搭建高可用Web群集


下一篇:leetcode------------搜索旋转排序数组