常用的排序算法-快速记忆

一、冒泡排序-------循环n-1趟,每趟选一个相对最大的

最简单的排序,

冒泡排序,冒泡排序是循环N-1趟 ,从i=0开始,每趟从左到右,从j=0开始,比较N-1-i次,依次比较相邻索引对应的两数,左比右大则交换值,否则不变。这样趟i都能拿到一个最大值,即I-1个最大值,最后一个最小值不用比。排序结束。(优化点:如果某躺未交换,说明已正序,可终止)。

那么最好的情况就是序列本身就是升序的,一趟下来比较了n-1次不需要交换结束排序,时间复杂度为O(n);

最坏的情况序列本身降序,那么第一次就需要交换n-1次,第二次排序需要交换n-2次,最后一共需要交换(n-1)+(n-2)+(n-3)+….+1= n(n-1)/2,所以时间复杂度为O(n^2)。故时间复杂度为O(n)~O(n^2)。平均复杂度为O(n^2)。

二、选择排序

三、插入排序

N-1轮排序,

四、希尔排序

又称缩小增量排序,是一种优化后的高效的插入排序。目前看来,希尔的核心最后出来的并不是绝对有序的,是宏观排序,如果用希尔之后,再用一次插入排序,也能很高效的绝对排序。

原理:

比如,先2个为一组,数组的增量索引=N/2,N(奇数为N+1)个组,每组内的2个数进行一次小范围内的插入排序(需要换则其索引自然交换了)。第一轮的每组做完之后。

开始第二轮,增量索引变成N/2/2,N。。。再来一轮内部比较。

最后增量索引变成1,形成了只有一组,那希尔排序结束,得到一个大概的宏观排序结果,还需要做一次插入排序。

五、快速排序-------快是比冒泡快,原因是拿一个随机数拆成两份,递归此操作

随机,或就第一数X,先拿去和所有数做一趟比较排序后,把比X小的放左边,大的放右边。(核心就是这行)

然后再对两边的数分别就行如此递归快速排序。

发布了39 篇原创文章 · 获赞 0 · 访问量 797

猜你喜欢

转载自blog.csdn.net/qq_15458763/article/details/103606422