有关归并排序-Java实现

有关归并排序:其中的分治思想很值得参考:

 1 /**
 2      * 归并排序 块合并
 3      * @param num 目标的排序数组
 4      * @param leftIndex 传入的分治块的做左端索引
 5      * @param mid 中间索引
 6      * @param rightIndex 传入的分治块的做右端索引
 7      * @param temp 中间转储数组
 8      */
 9     public static void merge(int[] num,int leftIndex,int mid,int rightIndex,int[] temp){
10         int i=leftIndex;
11         int j=mid+1;
12         int t=0;
13         //每次都分成两组进行比较合并,每次合并一定是单侧有序的
14         while (i<=mid&&j<=rightIndex){
15             if (num[i]<num[j]){
16                 temp[t++]=num[i++];
17             }
18             else{
19                 temp[t++]=num[j++];
20             }
21         }
22         //剩余的进行合并
23         while (i<=mid){
24             temp[t++]=num[i++];
25 
26         }
27         while (j<=rightIndex){
28             temp[t++]=num[j++];
29         }
30         //数组进行归为
31         t=0;
32         int tIndex=leftIndex;
33         while (tIndex<=rightIndex){
34             num[tIndex++]=temp[t++];
35         }
36     }
37 
38     /**
39      * 分治合并
40      * @param num 目标排序数组
41      * @param leftIndex 左端索引
42      * @param rightIndex 右端索引
43      * @param temp 中间转储数组
44      */
45     public static void mergeSort(int[] num,int leftIndex,int rightIndex,int[] temp)
46     {
47         //递归分治、分模块
48         if (leftIndex<rightIndex){
49             int mid=(leftIndex+rightIndex)/2;
50             mergeSort(num,leftIndex,mid,temp);
51             mergeSort(num,mid+1,rightIndex,temp);
52             merge(num,leftIndex,mid,rightIndex,temp);
53 
54         }
55     }

 

posted @ 2023-03-30 18:02  Mexcellent  阅读(38)  评论(0)    收藏  举报