归并排序

关于递归思想,可参考我的递归基础文章: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 }

 

posted @ 2022-07-03 17:41  心动如雷  阅读(44)  评论(0)    收藏  举报