一、直接插入排序
1、原理
直接插入排序它的整个数组分为两个区间,即无序区间和有序区间
,每次选择无序区间的第一个元素,在有序区间选择合适位置插入。话不多说,下面来看它的代码实现:
2.代码实现

再来剖析一下这个排序的性能,最坏时间复杂度o(N),最好时间复杂度o(N^2),那么平均复杂度为o(N^2)。它的空间复杂度为o(1),它是不需要开拓分外的空间的。可以看出,这个排序不会颠倒相同数字得相对位置,我们在排序时选择的是大于即是就放在该数字的右边。以是它是稳固排序。若是一组数基本有序,那么选择插入排序算法效率会更高。
二、希尔排序
1.原理
希尔排序是建立在插入排序的基础上的,它把整个数组分成gap组,然后对每个组举行排序,排好之后再合成一个数组,继续分成gap/2组,重复上述步骤,直到gap=1;然后对整个数组举行插排,获得最终有序数组。
2.代码实现


下面来剖析这个排序的性能,它是在插入排序基础上举行了优化,以是它的时间复杂度要比插入排序小,最坏时间复杂度为o(N^2),最好为o(N),平均复杂度为o(N^1.3),空间复杂度为o(1),不属于稳固排序,由于在分组过程中无法保证相同数的相对位置。
三、选择排序
1.原理
每次从无序区间中选出最大的一个元素,存放在无序区间的最后,直到所有待排序的数据所有排完。
2.代码实现

下面剖析排序性能,最坏时间复杂度o(N^2),最好时间复杂度o(N),平均时间复杂度o(N^2),空间复杂度o(1),属于不稳固排序。
四、堆排序
1.原理
堆排序也是建立在选择排序的基础上,只不过它是通过建大堆来选择最大的元素,把堆顶元素和堆的最后一个元素交流,再把它放入另外一个数组,然后对堆举行向下调整。
2.代码实现


下面来看算法性能,时间复杂度为o(N*logN),空间复杂度为o(1),堆排序依然属于不稳固排序。
五、冒泡排序
1.原理
冒泡排序也把数组分成两个区间,无序区间[0,array.length-i-1],有序区间[array.length-i-1,array.length],每次按顺序从无序区间取出一个数,把它和后面的数逐一举行对照,大数排后面,直到遍历完所有数。冒泡次数为array.length,需要对照的次数为array.length-i-1。
2.代码实现

下面来看算法性能,最坏时间复杂度为o(N^2),最好时间复杂度为o(N),平均时间复杂度为o(N^2),空间复杂度为o(1)。冒泡排序为稳固排序。由于在对照过程中,都是把大于它的数放在后面。

六、快速排序
1.原理
从待排序区间选择一个值,作为基准值,遍历整个待排序区间,将比基准值小的值放在它的左边,比它的值放在右边,左右两个小区间根据同样的方式处置,直到小区间的长度=1,或者长度为0,示意已经所有排好序。
2.代码实现




它的最坏时间复杂度为0(N^2),最好时间复杂度o(NlogN),平均时间复杂度o(NlogN),空间复杂度o(NlogN)。不稳固,可以看出它比前几个排序效率高了许多。
七、合并排序
1.原理
接纳分治法,将已有序的子序列合并,先使每个子序列有序,再使每段序列有序,最后合并成一个有序数组。
2.代码实现



该排序算法的时间复杂度为o(N
logN),空间复杂度为o(N),稳固排序。

,

联博统计

www.xogate.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,