
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员在学习Java编程开发语言的时候需要掌握的一些算法类型等内容,而本文我们就继续来了解一下,排序算法应用分析与选择方法。
执行效率
对于排序算法执行效率的分析,不仅仅只是简简单单的一个时间复杂度。
还需要从以下方面进行分析:
好情况、坏情况、平均情况时间复杂度。对于排序算法来说,有序度不同的数据,对于排序的执行时间有一定的影响,从多个方面分析时间复杂度会更加准确
时间复杂度的系数、常数、低阶。在实际开发中,大多是对一些规模较小的数据进行排序,实际运行速度是非常快的,这时候也可以把系数、常数、低阶考虑进来
比较次数或交换(移动)次数。常见的排序算法都是基于比较的,这时候会涉及到元素比较大小和元素交换或移动,这时候比较次数和交换次数也会影响到执行效率
内存消耗
在算法中,内存消耗基本上通过空间复杂度来衡量。
但是,在排序算法中,会有一个新的概念用来衡量内存消耗,即原地排序。原地排序算法特指不需要另外空间存储的排序算法,空间复杂度能达到O(1)。
稳定性
针对排序算法,还有稳定性这样一个重要的度量指标。
这个概念是指,如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。
如何选择合适的排序算法?
选择依据
在实际开发的时候,并不是时间复杂度低的排序算法就能适用于任何场景。
比如说,计数排序算法适用于较集中的小范围整数序列,桶排序算法适用于容易划分为桶的均匀整数序列,计数排序适用于可划分为具有递进关系的“位”的整数序列。
一般来说,对于小规模的数据进行排序时,可以选择时间复杂度是O(n2)的排序算法;对于大规模的数据进行排序时,需要选择时间复杂度是O(nlogn)的排序算法;对于非比较类排序算法,主要应用于特定的场景。
这样选择的原因是,时间复杂度为O(n2)的排序算法会比O(nlogn)的排序算法的效率低,一般指的都是时间复杂度在没有系数、常数、低阶介入比较的情况,当真正使用的时候,这些是不可避免的。
因此,在实际使用时,有些时候O(n2)的排序算法也会比O(nlogn)的排序算法的效率高。
通常,为了兼顾任意规模数据的排序,在一个方法中会使用到多种排序算法。
排序实现-Glibc
例如Glibc的qsort()函数,数据量较小时会优先使用归并排序算法来对输入数据排序,当数据量比较大时,qsort()会改用快速排序算法来排序。
在归并排序中,每个元素小于32时,会直接进行归并排序;当有元素大于32时,则先将元素的指针拷贝到临时空间,再使用归并排序对指针进行排序。
在快排过程中,元素个数小于等于4个时候,会使用插入排序代替快速排序。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。