归并排序原理:
利用分治的思想,通过递归来实现的,
java代码:
/** * 归并排序:不是原地排序,时间复杂度O(n*longN),稳定排序 * * @param arr * @return */ public static int[] guibing(int[] arr) { if (arr.length == 1) { return arr; } int mod = arr.length / 2; int[] a = new int[mod]; int[] b = new int[arr.length - mod]; System.arraycopy(arr, 0, a, 0, mod); System.arraycopy(arr, mod, b, 0, arr.length - mod); return hebing(guibing(a), guibing(b)); } /** * 两个有序数组合并 * * @param a * @param b * @return */ public static int[] hebing(int[] a, int[] b) { int[] result = new int[a.length + b.length]; int index_a = 0, index_b = 0; for (int i = 0; i < result.length; i++) { if (index_a >= a.length) { result[i] = b[index_b++]; continue; } if (index_b >= b.length) { result[i] = a[index_a++]; continue; } if (a[index_a] <= b[index_b]) { result[i] = a[index_a++]; } else { result[i] = b[index_b++]; } } return result; }
性能分析:
时间复杂度:O(n*logN)
空间复杂度:O(n)
原地排序:否
稳定排序:是