归并排序(Merge Sort)也称为合并排序。合并排序是建立在归并操作上的一种有效的排序算法。该算法也是采取分治(Divide and Conquer)的思想。合并算法是将两个(或两个以上)有序表合并成一个新的有序表,即把带排序的序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
算法描述:
1,申请空间,使其大小为两个已经排序序列的大小之和,该空间用来存放合并后的序列。
2,设定两个指针,最初位置分别为两个已经排序序列的起始位置。
3,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动到下一位置。
4,重复步骤3直到某一指针到达序列尾。
5,将另一序列剩下的所有元素直接复制到合并序列尾。
动图演示:

代码实现:
public class Sort{ public static void printArr(int[] arr){ for(int i:arr){ System.out.print(i+" "); } } public static void mergeSort(int[] arr,int low,int high){ int mid=(low+high)/2; if(low<high){ mergeSort(arr,low,mid); mergeSort(arr,mid+1,high); merge(arr,low,mid,high); } } public static void merge(int[] arr,int low,int mid,int high){ int i=low,j=mid+1,k=0; int[] temp=new int[high-low+1]; while(i<=mid&&j<=high){ if(arr[i]<arr[j]){ temp[k++]=arr[i++]; }else{ temp[k++]=arr[j++]; } } while(i<=mid){ temp[k++]=arr[i++]; } while(j<=high){ temp[k++]=arr[j++]; } for(int m=0;m<high-low+1;m++){ arr[low+m]=temp[m]; } } public static void main(String[] args){ int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; int low=0;int high=arr.length-1; mergeSort(arr,low,high); printArr(arr); } }
posted on
浙公网安备 33010602011771号