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

Posted COOL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多种排序算法的思路和简单代码的实现相关的知识,希望对你有一定的参考价值。

下面是和快速排序,堆排序,相媲美的归并排序,时间复杂度都为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     }

 

以上是关于多种排序算法的思路和简单代码的实现的主要内容,如果未能解决你的问题,请参考以下文章

常见排序算法思路和简单代码实现

拓扑排序算法实现

排序算法-冒泡排序

TimSort算法分析

冒泡排序算法原理和代码实现,就是这么简单。。。

C语言排序