本文讨论的所有排序算法默认进行升序排列
冒泡排序
算法思想:相邻元素两两比较,如果是升序排列,不变;如果不是,交换两个元素。多次局部有序的操作达到整体有序
时间复杂度:
O(n2)
O
(
n
2
)
,共需要比较
n(n−1)2
n
(
n
−
1
)
2
次
代码:GitHub
选择排序
算法思想:遍历数组,每次选择出未排序部分最小的数值,将其置于恰当位置,最终实现排序
时间复杂度:选择排序与冒泡排序需要的比较次数相同,都是
n(n−1)2
n
(
n
−
1
)
2
次,但选择排序最多只需要
n−1
n
−
1
次数据交换
代码:GitHub
插入排序
算法思想:假设元素arr[0,1,…,i]是有序排列的数组,对于新的数据data,比较data与arr[k], k=i,i-1,…0,找到合适的位置将data插入到有序数组中,形成新的有序数组
时间复杂度:
代码:GitHub