1.归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
1.1Java算法代码
public static void merge(int[] arr, int left, int mid, int right) {//归并排序,将两个数组合并为一个有序数组
int[] ans = new int[right - left + 1];
int k = 0;
int s1 = left;
int e1 = mid;
int s2 = mid + 1;
int e2 = right;
while (s1 <= e1 && s2 <= e2) {
if (arr[s1] <= arr[s2]) {
ans[k++] = arr[s1++];
}else {
ans[k++] = arr[s2++];
}
}
while (s1 <= e1) {
ans[k++] = arr[s1++];
}
while (s2 <= e2) {
ans[k++] = arr[s2++];
}
for(int t = 0; t < ans.length; t++) {
arr[left + t] = ans[t];
}
}
public static void mergeSort(int[] arr, int left, int right) {//递归将数组划分
if(left >= right) {
return;
}
int mid = (left + right) / 2;
mergeSort(arr,left,mid);
mergeSort(arr,mid + 1,right);
merge(arr,left,mid,right);
}
1.2性能分析
时间复杂度 | 空间复杂度 |
O(n*log(n)) | O(n) |
1.3稳定性
稳定的排序