常见排序算法-----归并排序

 1     // 归并排序
 2     /**
 3      * 利用分而治之的思想, 将大的无序数组拆分 一直拆到不能再拆位置,进行合并
 4      * 
 5      * 很适合用于两个有序数组的合并
 6      */
 7     public static void main(String[] args) {
 8 
 9         MergeSort ms = new MergeSort();
10         int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
11         ms.mergeSort(arr);
12         for (int i = 0; i < arr.length; i++) {
13             System.out.println(arr[i]);
14         }
15 
16     }
17 
18     public void mergeSort(int[] arr) {
19         // 先将数组分成左右两个数组
20         int[] temp = new int[arr.length];
21         for (int i = 0; i < temp.length; i++) {
22             temp[i] = arr[i];
23         }
24         sort(arr, 0, arr.length - 1, temp);
25     }
26 
27     public void sort(int[] arr, int start, int end, int[] temp) {
28 
29         if (start >= end) {
30             return;
31         }
32 
33         int mid = (start + end) >> 1;
34 
35         sort(arr, start, mid, temp);// 左边归并排序,使得左子序列有序
36         sort(arr, mid + 1, end, temp);// 右边归并排序,使得右子序列有序
37         merge(arr, start, mid, end, temp);// 将两个有序子数组合并操作
38     }
39 
40     public void merge(int[] arr, int start, int mid, int end, int[] temp) {
41 
42         int i = start;
43         int j = mid + 1;
44         int index = start;
45         while (i <= mid && j <= end) {
46             if (arr[i] < arr[j]) {
47                 temp[index] = arr[i];
48                 i++;
49             } else {
50                 temp[index] = arr[j];
51                 j++;
52             }
53             index++;
54         }
55 
56         if (i == mid + 1) {
57             for (int k = j; k <= end; k++) {
58                 temp[index] = arr[k];
59                 index++;
60             }
61         } else {
62             for (int k = i; k < mid + 1; k++) {
63                 temp[index] = arr[k];
64                 index++;
65             }
66         }
67         for (int k = 0; k < temp.length; k++) {
68             arr[k] = temp[k];
69         }
70 
71     }

 先拆分 拆分到最底层后 在排序合并  稳定算法  归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。

详见 https://www.cnblogs.com/chengxiao/p/6194356.html 

posted on 2018-07-21 16:26  Mxxxx  阅读(118)  评论(0编辑  收藏  举报