java中的归并排序

java中的归并排序简单的说就是由小到大的排序(大问题小规模化),然后处理。

举例说明:

12   ,1   ,4   ,0   ,45   ,21   ,6

我们对于这个数组表排序,首先我们两个为一组,然后组内有序

java中的归并排序_第1张图片

我们一般在代码实现时会有定义start1 和end1 ,start2和end2来标识,我们来进行

第一次归并:

一小块排序:

java中的归并排序_第2张图片

然后将s1,e1,s2,e2向下一块赋予,让s1=e2+1,e1 =s1+ 块长+1,s2=e1+1,e2 

s2+块长+1;然后完成总排序。

java中的归并排序_第3张图片

第二次排序:

排序前:

java中的归并排序_第4张图片

排序后:

java中的归并排序_第5张图片

第三次排序:

排序前:

java中的归并排序_第6张图片

排序后:

java中的归并排序_第7张图片

至此,归并排序就全部结束了。

代码实现:

public static void merge(int array[],int gap){
		int start1 = 0;
		int end1 = start1+gap-1;
		int start2 = end1+1;
		int end2 = start2+gap-1 < array.length-1?start2+gap-1:array.length-1;
		//排序
		int []tmpArr = new int [array.length];
		int i = 0;
		
		while(start2 < array.length){
			//比较元素 s1 s2  s1++ s2++
			while(start1<=end1 && start2<=end2){
				if(array[start1] < array[start2]){
				tmpArr[i++] = array[start1];
				start1++;
				}else{
					tmpArr[i++] = array[start2];
					start2++;
				}
			}
			while(start1 <= end1){
				tmpArr[i++] =array[start1++];
			}
			while(start2<=end2){
				tmpArr[i++] =array[start2++];
			}
			start1 = end2+1;
			end1 = start1+gap-1;
			start2 = end1+1;
			end2 = start2 + gap-1

新手入门,如有错误,请多多指教。

你可能感兴趣的:(java)