经典排序算法合集
来源:互联网 发布:域名注册手机号 编辑:程序博客网 时间:2024/04/29 08:03
1. 经典排序算法—归并排序Merge sort
原理,采用递归把原始数组不断二分,分成若干子数组,对每一个子数组进行排序,此步算法复杂度为2*T(n/2)继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组。--算法复杂度为O(n)
总的算法复杂度 T(n)=2*T(n/2)+O(n)
采用递归树方法,计算后,合并排序的算法复杂度为O(n log n)
举例:无序数组[6 2 4 1 5 9]
第一步 [6 2 4 1 5 9]原始状态
第二步 [2 6] [1 4] [5 9]递归分解后,两两合并排序,排序细节后边介绍
第三步 [1 2 4 6] [5 9]继续两组两组合并
第四步 [1 2 4 5 6 9]合并完毕,排序完毕
输出结果[1 2 4 5 6 9]
详细介绍第二步到第三步的过程,其余类似
第二步:[2 6] [1 4] [5 9]两两合并,其实仅合并[2 6] [1 4],所以[5 9]不管它,
原始状态
第一个数组[2 6]
第二个数组[1 4]
--------------------
第三个数组[...]
第1步,顺序从第一,第二个数组里取出一个数字:2和1
比较大小后将小的放入第三个数组,此时变成下边这样
第一个数组[2 6]
第二个数组[4]
-------------------
第三个数组[1]
第2步,继续刚才的步骤,顺序从第一,第二个数组里取数据,2和4,
同样的比较大小后将小的放入第三个数组,此时状态如下
第一个数组[6]
第二个数组[4]
--------------------
第三个数组[1 2]
第3步,再重复前边的步骤变成,将较小的4放入第三个数组后变成如下状态
第一个数组[6]
第二个数组[...]
--------------------
第三个数组[1 2 4]
第4步,最后将6放入,排序完毕
第一个数组[...]
第二个数组[...]
--------------------
第三个数组[1 2 4 6]
[ 1 2 4 6 ]与[ 5 9 ]的合并过程与上边一样,不再分解 。 总共需要比较n次。
static void merge(int[] unsorted, int first, int mid, int last, int[] sorted) { int i = first, j = mid; int k = 0; while (i < mid && j < last) if (unsorted[i] < unsorted[j]) sorted[k++] = unsorted[i++]; else sorted[k++] = unsorted[j++]; while (i < mid) sorted[k++] = unsorted[i++]; while (j < last) sorted[k++] = unsorted[j++]; for (int v = 0; v < k; v++) unsorted[first + v] = sorted[v]; } static void merge_sort(int[] unsorted, int first, int last, int[] sorted) { if (first + 1 < last) { int mid = (first + last) / 2; Console.WriteLine("{0}-{1}-{2}", first, mid, last); merge_sort(unsorted, first, mid, sorted); merge_sort(unsorted, mid, last, sorted); merge(unsorted, first, mid, last, sorted); } } static void Main(string[] args) { int[] x = { 6, 2, 4, 1, 5, 9 }; int[] sorted = new int[x.Length]; merge_sort(x, 0, x.Length, sorted); for (int i = 0; i < sorted.Length; i++) { if (x[i] > 0) Console.WriteLine(x[i]); } Console.ReadLine(); }
0 0
- 经典排序算法合集
- 排序算法合集
- 排序算法合集
- 排序算法合集
- 排序算法合集
- 排序算法合集
- 排序算法合集
- 排序算法合集
- 数据结构算法经典合集
- 排序算法合集(Java)
- 史上最强排序算法合集
- C++实现排序算法合集
- 机器学习经典论文/survey合集 - 算法组
- 经典网站 合集
- 排序合集
- 排序问题合集
- 排序合集
- android经典视频教程合集
- Failed to connect to Xilinx hw_server. Check if the hw_server is running and correct TCP port is used.
- Flask入门笔记(一)
- flask mega-tutorial 1.0 documentation学习记录
- MongoDB 学习笔记(原创)
- java安装1335错误解决办法(亲测)
- 经典排序算法合集
- vim使用笔记
- js的基本数据类型学习
- RBF径像神经网络
- pyqt样式表语法笔记(上) --原创
- 微信小程序wx:for和wx:for-item的正确用法
- pyqt样式表语法笔记(中)--原创
- pyqt样式表语法笔记(下)--原创
- 【鸡汤】忘记哪儿来的故事!