java中的排序算法——归并排序

归并排序

归并的思想是把一个数组分成两半,排序每一半,然后把每一半归并成一个有序的数组。可分为多路归 并排序、两路归并排序,可用于内排序,也可用于外排序。
原理:先将长度为n的一个有序列表以n/2的长度进行递归分割,直到分割为n个有序列表,每个有序列表 的长度为1,再进行两两归并,得到n/2个长度为2的有序列表,进行递归合并后归并成一个长度为n的有 序列表。
Java实现的二路归并排序算法代码实现如下
java中的排序算法——归并排序_第1张图片
java中的排序算法——归并排序_第2张图片
java中的排序算法——归并排序_第3张图片
输出结果:
java中的排序算法——归并排序_第4张图片
总结: 归并排序,可用顺序存储结构,也易于在链表上实现。
归并排序的优点:
1.比简单排序要快的多,冒泡排序,插入排序,选择排序要用O(NN)时间,而归并排序只要O(NlogN);
2.容易实现,归并排序在概念上比快速排序,希尔排序容易理解。
缺点: 需要在存储容器中有另一个大小等于被排序的数据项数目的数组,如果初始数组几乎占满整个存 储器,那么归并排序将不能工作,但是,如果有足够的空间,完全可以选择归并排序。递归的方法可能 效率低,有时可以用一个简单循环或一个基于栈的方法来代替他。 递归和栈之间有一种紧密的联系,任何可以用递归完成的操作都可以用一个栈来实现。大部分的编译器 都使用栈来实现递归,当调用一个方法的时候,编译器会把这个方法的所有参数和其返回地址都压入栈 中,这个方法可以通过获取栈顶元素的值来访问它的参数,然后把控制转移给这个方法,当这个方法返 回的时候,它查看栈以获取返回地址,这个地址及方法的所有参数退栈并销毁,参数消失了,并且控制 权重新回到返回地址处。
复杂度:每次递归,规模除以2,递归logN次,每次归并,操作次数正比于数列长度,所有子问题加起来O(N),总时间复杂度O(NlogN),平均速度比快速排序慢,尽管都是O(NlogN),但常数系数更大。
稳定性
是一种稳定的排序,每次归并确保相同的数,第一个数列的先加入,这是相对于快速排序的一大优势,归并排序和快速排序都采用了分治思想。

上一篇:java中的排序算法——选择排序
下一篇:java中各种算法和数据结构的使用场景

你可能感兴趣的:(java)