码迷,mamicode.com
首页 > 编程语言 > 详细

多种排序算法的思路和简单代码的实现(三)

时间:2017-07-16 19:20:34      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:length   堆排   blank   blog   int   code   cinder   完成   数列   

下面是和快速排序,堆排序,相媲美的归并排序,时间复杂度都为O(nLog2n)。

对于归并排序中出现的递归算法,调用的函数顺序以及如何返回,大家可以访问这个网址来详细理解

http://blog.csdn.net/cinderella_hou/article/details/51763681

个人看了,非常受益。。

 1 /*
 2      * 归并排序: 先递归分解数列,再合并数列,就是归并。归并排序是稳定的。
 3      */
 4     public static void mergSort(int[] a) {
 5 
 6         int[] mergarray = new int[a.length]; // 新建一个临时数组,来存储排序好的组
 7         mergSort1(a, 0, a.length - 1, mergarray);
 8 
 9     }
10 
11     // 递归分解数列函数,来完成到每一组只有一个数,就是有序的,然后从后往前进行合并即可。
12     public static void mergSort1(int[] a, int min, int max, int[] b) {
13 
14         int mid = (min + max) / 2;
15         if (min < max) {
16             mergSort1(a, min, mid, b); // 左边有序
17             mergSort1(a, mid + 1, max, b); // 右边有序
18             merg(a, min, mid, max, b);
19         }
20     }
21 
22     // 有序数列合并,从第一组的第一个开始和另外一组的第一个数进行比较,把小的赋值给临时数组,在对应数列中删除这个数。
23     // 循环进行比较,如果有数列为空,则把另一个数列剩余的数都赋值给临时数组即可。
24     public static void merg(int[] a, int min, int mid, int max, int[] b) {
25 
26         int i = min, j = mid + 1, k = min;
27         while (i <= mid && j <= max) {
28             if (a[i] < a[j])
29                 b[k++] = a[i++];
30             else {
31                 b[k++] = a[j++];
32             }
33         }
34         while (i <= mid) {
35             b[k++] = a[i++];
36 
37         }
38         while (j <= max) {
39             b[k++] = a[j++];
40         }
41         for (int k2 = min; k2 < k; k2++) {
42             a[k2] = b[k2];
43         
44         }
45 
46     }

 

多种排序算法的思路和简单代码的实现(三)

标签:length   堆排   blank   blog   int   code   cinder   完成   数列   

原文地址:http://www.cnblogs.com/wang118/p/7191213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!