JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
2017-06-09 00:00
1011 查看
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:
归并排序(英语:Mergesort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(DivideandConquer)的一个非常典型的应用,且各层分治递归可以同时进行。
作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:
自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第2种方法);
自下而上的迭代;
在《数据结构与算法JavaScript描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:
However,itisnotpossibletodosoinJavaScript,astherecursiongoestoodeepforthelanguagetohandle.
然而,在JavaScript中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。
说实话,我不太理解这句话。意思是JavaScript编译器内存太小,递归太深容易造成内存溢出吗?还望有大神能够指教。
和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(nlogn)的时间复杂度。代价是需要额外的内存空间。
算法步骤
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
设定两个指针,最初位置分别为两个已经排序序列的起始位置;
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
重复步骤3直到某一指针达到序列尾;
将另一序列剩下的所有元素直接复制到合并序列尾。
动图演示
1、JavaScript代码实现
2、Python代码实现
3、Go代码实现
4、Java实现
登录乐搏学院官网http://www.learnbo.com/
或关注我们的官方微博微信,还有更多惊喜哦~
归并排序(英语:Mergesort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(DivideandConquer)的一个非常典型的应用,且各层分治递归可以同时进行。
作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:
自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第2种方法);
自下而上的迭代;
在《数据结构与算法JavaScript描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:
However,itisnotpossibletodosoinJavaScript,astherecursiongoestoodeepforthelanguagetohandle.
然而,在JavaScript中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。
说实话,我不太理解这句话。意思是JavaScript编译器内存太小,递归太深容易造成内存溢出吗?还望有大神能够指教。
和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(nlogn)的时间复杂度。代价是需要额外的内存空间。
算法步骤
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
设定两个指针,最初位置分别为两个已经排序序列的起始位置;
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
重复步骤3直到某一指针达到序列尾;
将另一序列剩下的所有元素直接复制到合并序列尾。
动图演示
1、JavaScript代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | < 3ff8 p> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
或关注我们的官方微博微信,还有更多惊喜哦~
相关文章推荐
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
- JavaScript ,Python,Go,java,C#系列算法之【插入排序】篇
- JavaScript ,Python,Go,java,C#系列算法之【插入排序】篇
- JavaScript ,Python,java,C#,Go系列算法之【插入排序篇】
- JavaScript ,Python,java,Go系列算法之选择排序
- JavaScript ,Python,java,Go系列算法之选择排序
- JavaScript ,Python,java,Go系列算法之【选择排序】篇
- JavaScript ,Python,java,Go系列算法之选择排序
- python算法实现系列-归并排序
- 【数据结构&&算法系列】归并排序简单介绍及python代码
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 万事不求人系列之-智能点餐算法实现-JavaScript实现智能点餐
- 傻瓜学算法系列之排序——4.归并排序
- 排序系列算法——归并排序
- Python 数据结构与算法 —— 从分治的角度看快速排序、归并排序
- 【从零学习经典算法系列】分治策略实例——归并排序(Mergesort)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- Python 数据结构与算法——归并排序