병합 정렬 병합 정렬 자바 구현

말할 필요도 없이, 코드를 붙여라. 코드는 매우 못생겼고, 인코딩 습관이 좋지 않다.
package Sort;

import java.util.Arrays;

public class MergeSort {
	public static void main(String args[])
	{
		int array[]={8,7,6,5,4,3,2,1};
		MergeSort sort= new MergeSort();
		sort.Merge_Sort(array, 0, array.length-1);
		System.out.println(Arrays.toString(array));
	}
	/*
	 *       
	 * 
	 *          (       )      ,              ,    
	 */
	public void Merge_Sort(int array[],int left,int right)
	{
		if(left<right)
		{
			int middle=(left+right)/2;
			Merge_Sort(array, left,middle);              
			Merge_Sort(array,middle+1,right);
			Merge(array, left, middle, right);
		}
	}
	/*            
	 *  array[p]~array[q]       ,array[q+1]~array[r]     ,         
	 *       ,   array[p]~array[r]  
	 *1    array[p]~array[q]     left 
	 *2    array[q+1]~array[r]     right 
	 *   left、right          0x7fffffff,    int ,    ,    。
	 *3、    left,right     ,     array 。
	 * 
	 */
	public  void Merge(int [] array,int p,int q,int r)
	{
		int left[]=new int[q-p+2];
		int right[]=new int[r-q+1];
		for(int i=0,j=p;i<left.length-1;i++,j++)
		{
		 	left[i]=array[j];
		}
		left[left.length-1]=0x7fffffff;
		for(int i=0,j=q+1;i<right.length-1;i++,j++)
		{
			right[i]=array[j];
		}
		right[right.length-1]=0x7fffffff;
		for(int k=p,i=0,j=0;k<=r;k++)
		{
			System.out.println("k:"+k);
			if(left[i]<=right[j])
			{
				array[k]=left[i++];
			}
			else
			{
				array[k]=right[j++];
			}
		}
	}
}

좋은 웹페이지 즐겨찾기