MergeSort归并排序(罗召勇版)

2021-06-10 12:03

阅读:396

标签:new   tostring   system   排序   oid   array   bsp   print   临时   

 
 1 package mergesort;
 2 
 3 import java.util.Arrays;
 4 
 5 public class MergeSort {
 6     public static void main(String[] args) {
 7         int[] arr = new int[]{11, 6, 22, 2, 21, 19, 3, 8, 24, 31};
 8         System.out.println(Arrays.toString(arr));
 9         mergeSort(arr, 0, arr.length-1);
10         System.out.println(Arrays.toString(arr));
11     }
12 
13     public static void mergeSort(int[] arr, int start, int end) {
14         int middle = (start + end) / 2;
15         if (start  end) {
16             //创造低位
17             mergeSort(arr, start, middle);
18             //创造高位
19             mergeSort(arr, middle + 1, end);
20             //调用归并
21             merge(arr, start, middle, end);
22         }
23     }
24 
25     public static void merge(int[] arr, int start, int middle, int end) {
26         //用于存储归并后数据的临时数组
27         int[] temp = new int[end - start + 1];
28         //记录低位数组中遍历时的下标
29         int low = start;
30         //记录高位数组中遍历时的下标
31         int high = middle + 1;
32         //记录临时数组中数据下标
33         int index = 0;
34         //遍历两个数组取出小的数字,放入临时数组
35         while (low  end) {
36             if (arr[low]  arr[high]) {
37                 temp[index] = arr[low];
38                 low++;
39             } else {
40                 temp[index] = arr[high];
41                 high++;
42             }
43             index++;
44         }
45         //处理多余数据
46         while (low  middle) {
47             temp[index++] = arr[low++];
48         }
49         while (high  end) {
50             temp[index++] = arr[high++];
51         }
52         //将归并后的数据写入原数组
53         for (int i = 0; i ) {
54             arr[i + start] = temp[i];
55         }
56     }
57 }

 

MergeSort归并排序(罗召勇版)

标签:new   tostring   system   排序   oid   array   bsp   print   临时   

原文地址:https://www.cnblogs.com/traodm/p/14458234.html


评论


亲,登录后才可以留言!