排序介绍
归并排序是利用归并思想实现的排序方法,该算法采用经典的分治策略(分治法即将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各个答案“修补”到一起,即分而治之)
排序示意图
代码实现
//分+合方法
public static void mergeSort(int []arr,int left,int right,int[]temp) {
if(left<right) {
int mid=(left+right)/2;
mergeSort(arr, left, mid, temp);
mergeSort(arr, mid+1, right, temp);
merge(arr, left, mid, right, temp);
}
}
//合并方法
public static void merge(int []arr,int left,int mid,int right,int[]temp) {
int i=left;
int j=mid+1;
int t=0;
while(i<=mid&&j<=right) {
if(arr[i]<=arr[j]) {
temp[t]=arr[i];
t++;
i++;
}else {
temp[t]=arr[j];
j++;
t++;
}
}
while(i<=mid) {
temp[t]=arr[i];
t++;
i++;
}
while(j<=right) {
temp[t]=arr[j];
j++;
t++;
}
t=0;
int tempLeft=left;
while(tempLeft<=right) {
arr[tempLeft]=temp[t];
t++;
tempLeft++;
}
}
public static void main(String[] args) {
int []arr= {8,4,5,7,1,3,6,2};
int []temp=new int[arr.length];
mergeSort(arr,0,arr.length-1,temp);
System.out.println(Arrays.toString(arr));