下图可以清晰看出具体赋值的位置是随着指针变换而变换的
public class Solution {
/**
* @param A: an integer array
* @return: nothing
*/
public void sortIntegers2(int[] A) {
// write your code here
if(A==null||A.length<0)
{
return ;
}
int n=A.length;
int []temp=new int[n];
mergeSort(A,temp,0,n-1);
}
public void mergeSort(int []A,int []temp,int start,int end)
{
if(start>=end){return;}
int mid=start+(end-start)/2;
mergeSort(A,temp,start,mid);
mergeSort(A,temp,mid+1,end);
mergeCore(A,temp,start,end,mid);
}
public void mergeCore(int []A,int []temp,int start,int end,int mid)
{
if(start>=end){return;}
int left=start;
int right=mid+1;
int t=start;
while(left<=mid&&right<=end)
{
if(A[left]<A[right])
{
temp[t++]=A[left++];
}
else
{
temp[t++]=A[right++];
}
}
while(left<=mid){temp[t++]=A[left++];}
while(right<=end){temp[t++]=A[right++];}
for(t=start;t<=end;t++)
{
A[t]=temp[t];
}
}
}
归并排序应用之–合并链表
合并两个链表
归并排序是对一个数组或者链表先分 再治
现在两个链表已经是分了,那就直接进行治即可
在传统的归并当中,是前端 后端 比较谁小谁入 但需要额外空间
同理在链表当中也是谁小谁入 却不需要额外空间