冒泡排序
思想:首先找到一个最大值或者最小值,然后在剩下的待排序集合中找最大或最小
方法:相邻的两个比较,将较大的值向后交换,待第一次循环结束,最大值交换到最后一个,因为是两两比较,所以第一次循环至少需要比较n-1次,最坏情况下需交换n-1次;随后每次循环,比较次数逐渐减少,直达只剩一个元素,时间复杂度为一个等差数列(忽略交换次数),O(n^2)
优化:存在优化的空间
选择排序
思想:同冒泡排序
方法:第一次,选定一个元素作为最大值,遍历所有元素,遇到比最大值大的元素,修改最大值的值,第一次遍历结束,得到最大值;第二次 遍历除最大值外的所有元素,寻找第二大值,每次寻找遍历的元素数成等差数列,时间复杂度O(n^2);
与冒泡排序的区别在于,选择排序寻找最大值时不存在元素之间的交换,但是冒泡排序如果一次循环中没有进行交换,则证明集合已排好序;可以结束了。选择排序每次循环必须比较完毕再能确定最大值。
插入排序
思想:每次,将一个新的元素插入到已排好序的集合中
方法:将待插入元素从排好序的队尾开始,逐一进行比较,待找到合适的位置,进行插入,比较的次数决定了该算法的时间复杂度,最好情况下每次比较一次,为O(n),最坏情况下,每次插入需要与所有的元素进行比较,时间复杂度为一个等差数列,复杂度O(n^2)