1.归并排序
1.1 基本思想
- 将两个或两个以上的有序子序列,归并成一个有序序列
- 在内部排序中,通常使用2-路归并排序
- 即:将两个位置相邻的有序子序列R[l...m]和R[m+1...n]归并为一个有序序列R[l.....n];
1.2 算法描述
public static void mergeSort(int[] arr){
int n = arr.length;
int[] temp = new int[n];
merge(arr,0,n-1,temp);
}
private static void merge(int[] arr,int low,int high,int[] temp){
if(low == high)return;
int mid = (low+high)/2;
merge(arr,low,mid,temp);
merge(arr,mid+1,high,temp);
for(int i=low;i<=high;i++){
temp[i] = arr[i];
}
int i=low;
int j=mid+1;
for(int k = low;k<=high;k++){
if(i==mid+1){
arr[k] = temp[j];
j++;
}else if(j==high+1){
arr[k] = temp[i];
i++;
}else if(temp[i]<=tem[j]){
arr[k] = temp[i];
i++;
}else{
arr[k] = temp[j];
j++;
}
}
}
1.3 归并排序算法分析
- 时间效率:O(nlog(n))
- 空间效率:O(n)
- 稳定性:稳定