基本思想:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:
这是我定义在一个方法类里边的代码,所以允许调用第一个方法,这样用的时候就特别方便,直接传一个数组就行
public static void MersergeSort(int []nums)
{
int length=nums.length;
int []temp=new int[length];
int left=0;
MersergeSort(nums,temp,0,length-1);
}
private static void MersergeSort(int []nums,int[]temp,int left,int right)
{
if(left==right)//每当只有一个元素时就返回
{
return ;
}
int mid=(left+right)/2;
MersergeSort(nums, temp, left, mid); //左分治
MersergeSort(nums, temp, mid+1, right);//右分治
int begin1=left;
int end1=mid;
int begin2=mid+1;
int end2=right;
int j=left;
while (begin1<=end1&&begin2<=end2)//如果有一边结束了就停止,剩下一边的值一定是大于排完的
{
if(nums[begin1]<nums[begin2])
{
temp[j++]=nums[begin1++];
}
else
{
temp[j++]=nums[begin2++];
}
}
while(begin1<=end1) //寻找还未排完的一边
{
temp[j++]=nums[begin1++];
}
while(begin2<=end2) //寻找还未排完的一边
{
temp[j++]=nums[begin2++];
}
for(int i=left;i<=right;i++) //将temp排完的数组拷贝回对应下标的nums数组
{
nums[i]=temp[i];
}
}