关于递归思想,可参考我的递归基础文章:https://www.cnblogs.com/wangymd/p/16440003.html
常建排序算法:https://www.cnblogs.com/wangymd/p/16420833.html 延续。
关于归并,就是分而治之的思想。理论知识了解,实操能力不行。
1、递归排序
1 package com.wangymd.sort; 2 3 /** 4 * @desc 归并排序 5 * @author wangymd 6 * @data 2022-07-03 16:26:14 7 */ 8 public class MergeSortTest extends BaseSort{ 9 10 public static void main(String[] args) { 11 int[] arr = {5, 9, 3, 1, 2, 8, 4, 7, 6}; 12 printNums("归并排序前", arr); 13 MergeSortTest mergeSort = new MergeSortTest(); 14 mergeSort.mergeSort(arr, 0, arr.length - 1); 15 printNums("归并排序后", arr); 16 } 17 18 /** 19 * 递归分解 20 * @param arr 21 * @param left 22 * @param right 23 */ 24 public void mergeSort(int[] arr, int left, int right) { 25 System.out.println("归并排序中left:" + left + ",right:" + right); 26 if (left == right) { 27 return; 28 } 29 int mid = (left + right) / 2; 30 mergeSort(arr, left, mid); 31 mergeSort(arr, mid + 1, right); 32 merge(arr, left, mid, right); 33 } 34 35 /** 36 * 合并 37 * @param arr 38 * @param left 39 * @param mid 40 * @param right 41 */ 42 private void merge(int[] arr, int left, int mid, int right) { 43 int[] tempArr = new int[right - left + 1]; 44 for (int i = left; i <= right; i++) { 45 tempArr[i - left] = arr[i]; 46 } 47 //排序 48 SelectSort sortTest = new SelectSort(); 49 tempArr = sortTest.sort1(tempArr); 50 51 //赋值 52 for (int i = 0; i < tempArr.length; i++) { 53 arr[left + i] = tempArr[i]; 54 } 55 printNums("归并排序过程结果", arr); 56 } 57 }