1.插入排序:直接插入排序,二分插入排序,希尔排序。
直接插入排序:直接插入排序就是将未排好序的元素向已经排好序的序列中插入。开始时只有一个元素是有序的,即第一个元素a[0],然后把第二个元素插入,在有序序列中寻找自己的位置。
二分插入排序:可以看到插入排序的时间代价主要消耗在比较次数太多以及节点的移位上。二分插入排序就是在寻找待排序元素的正确插入位置时采用二分查找的方法来查找,因为已经排好序的序列是有序的。但是时间复杂度仍然是n的平方。
希尔排序:二分插入排序通过减少比较的次数来提高排序效率,希尔排序通过减少移动次数来提高排序效率。希尔排序的思想主要是:先比较那些离得稍远些的元素,如果稍远的元素违背了排序的次序,就根据普通插入排序排列这些元素。然后在减小间距,直到排序的间距为1.使所有的元素都有序。他的时间复杂度是优于n的平方的。
2.选择排序:直接选择排序,堆排序。
直接选择排序:就是在所有的序列中选出最小的元素,然后选出第二小的元素,以此类推,所有的序列都变得有序。时间复杂度是n的平方。
堆排序:在优先队列中我们使用了最大化堆(完全二叉树的父节点比两个子节点都要大,但是子节点之间没有大小关系)。第一步将待排序元素创建成为一棵最大化堆或者最小化堆,第二步依次将树根删除就可以得到有序序列。时间复杂度为nlog(n)。
3。交换排序:冒泡排序,快排
冒泡:将一个元素和它旁边的元素比较,如果比它大,就交换,这样经过一轮冒泡,最大或者最小的元素被放到了最后,当然,如果经过那一轮排序发现没有元素移动,就可以判断这个序列已经是有序的,从而可以终止排序。
快排:选择一个元素作为中间元素,然后将其他的元素跟它比较,比它大的放到后面,比它小的放到前面,从而就找到了中间这个元素的最终位置。使用递归的方式再对其前面和后面的元数据排序。如果中间的元素选择的好,可以使排序的时间复杂度很好。
分享到:
相关推荐
各种排序算法小结 各种排序算法小结 各种排序算法小结 真的不错
数据结构排序算法小结 数据结构排序算法小结
各种经典排序算法小结---必知必会 各种经典排序算法小结---必知必会 各种经典排序算法小结---必知必会
包括顺序查找、二分查找、选择排序、冒泡排序,二分排序,插入排序,希尔排序,堆排序,归并排序等
在高级语言的执行速度上,c是最快的,c++其次,而java和c#是最后的。Java和c#流行,主要的一个原因是可以跨平台。
对java实现排序的一些总结。对一些常见的排序算法,比如:插入,冒泡,选择这些排序的java实现
插入排序、选择排序、冒泡排序、归并排序、快速排序和堆排序。 有详细的思路及算法分析、伪代码、图解、示例代码等。 比较列表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复多次后,最大的元素就“沉到”...
各种排序算法 原理及源码实现
NULL 博文链接:https://easense2009.iteye.com/blog/1568614
JavaScript中几种常见排序算法小结,学习js的朋友可以参考下,下面对多种方法进行了简单的小结。
小排序算法的稳定性和时间复杂度
java各种排序算法的稳定性和时间复杂度小结
整理的排序方法,用于学习,笔试面试,工作之用包括几乎所有的内部排序算法
几乎把网上的排序算法小结找遍了,简单地小结一下算法的思路(不含代码,只是用易懂的话说清楚算法是怎么做的),算法时间复杂度和空间复杂的求法(用理解的方式而不是分析代码),各种排序算法的优缺点,稳定与否...
各种排序算法的稳定性和时间复杂度小结.pdf
快排,堆排,归并排,希尔排,基本排等 各种排序算法的比较