package 归并排序;
import java.util.Arrays;
/**
* User:yang
*/
public class guibing {
/**
* 时间复杂度:
* 最好:n*log2(n)(堆排序,快速排序,归并都是)//快排不适合有序序列
* 空间复杂度:
* 最好:O(n)
* 稳定性: 不稳定
*
* @param array
* @param low
* @param mid
* @param high
*/
public static void merge(int[] array, int low, int mid, int high) {
int[] tmpArr = new int[high - low + 1];
int k = 0;
int s1 = low;
int e1 = mid;
int s2 = mid + 1;
int e2 = high;
while (s1 <= e1 && s2 <= e2) {
if (array[s1] <= array[s2]) {//写上等号稳定
tmpArr[k++] = array[s1++];
} else {
tmpArr[k++] = array[s2++];
}
}
while (s1 <= e1) {
tmpArr[k++] = array[s1++];
}
while (s2 <= e2) {
tmpArr[k++] = array[s2++];
}
for (int i = 0; i < tmpArr.length; i++) {
array[i + low] = tmpArr[i];
}
}
public static void mergeSortRec(int[] array, int low, int high) {
if (low == high) {
return;
}
int mid = (high + low) >>> 1;
mergeSortRec(array, low, mid);
mergeSortRec(array, mid + 1, high);
merge(array, low, mid, high);
}
public static void mergeSortDiGui(int[] array) {
mergeSortRec(array, 0, array.length - 1);
}
public static void main(String[] args) {
int[] ayyay = {1, 9, 6, 4, 5, 78, 2, 147, 56};
System.out.println(Arrays.toString(ayyay));
mergeSortDiGui(ayyay);
System.out.println(Arrays.toString(ayyay));
}}
归并排序,递归,稳定
最新推荐文章于 2024-09-06 10:38:06 发布
该博客详细介绍了归并排序算法的实现过程,包括其时间复杂度、空间复杂度和稳定性。通过一个名为`mergeSortDiGui`的静态方法展示了如何使用递归方式实现归并排序,并给出了完整的Java代码示例。博主还提供了测试用例,以验证排序算法的正确性。
摘要由CSDN通过智能技术生成