出品| CSDN博客
介绍
排序算法
冒泡排序
算法比较简单。 几乎所有语言涉及到算法的时候,都会涉及到冒泡算法。
算法思路:
比较相邻元素。 如果第一个比第二个大,则交换它们。
对每对相邻元素执行相同的操作,从第一对开始,到最后一对结束。 此时,最后一个元素应该是最大的数字。
对除最后一个元素之外的所有元素重复上述步骤。
每次对越来越少的元素重复上述步骤,直到没有可供比较的数字对。
选择排序
一次选择最大(最小)的一个,直到输出所有元素。
以供参考:
直接插入排序
插入排序的基本方法是:在每一步中,将一个待排序元素根据其排序码的大小插入到先前已排序元素集合的适当位置,直到所有元素都插入完毕。
算法思路:
当插入第i个(i >= 1)时,前面的V[0],V[1],...,V[i-1]已经排序完毕。 此时用V[I]的排序码比较V[i-1],V[i-2],...的排序码的顺序,找到插入位置,插入V[i] ,原位置的元素稍后会被插入到Move中。
以[21,25,49,25,16,08]为例,排序过程如下:
当数据集较小或基本有序时,该算法效率更高。
希尔排序
首先对数据进行预处理,使其基本有序,然后使用直接插入排序算法进行排序。
详细流程请参考:
快速排序
使用“分而治之”的思想对集合进行排序
以供参考:
堆排序
在讲堆排序之前,我们先来说一下什么是堆。
堆:堆是一棵完全二叉树,满足以下性质:
接下来我们来说说堆是如何排序的。 思路如下(以大顶堆为例):
根节点是整个堆的最大值,将其移除。
将剩余的n-1个节点重新构建成堆,然后移除根节点
重复步骤1和2。直到没有节点可以移动为止,生成有序序列。
该算法有两个问题需要解决:
如何从无序序列构建堆。
移除根节点后,如何用剩余节点重建堆。
详细介绍参见:
归并排序
归并排序(MERGE-SORT)是一种利用归并思想实现的排序方法。 该算法采用了经典的分而治之(-and-)策略(分治方法将问题分成()一些小问题然后递归地求解,并攻克()阶段,得到的答案在划分的阶段中被“修补”在一起,即分而治之)。
详细介绍参见:
总结
分类总结:
时间复杂度总结: