近来开始学习数据结构和算法,为工作第一步做准备,先把这两天看的排序按照自己理解来写一下。
(都是从小到大排序)
冒泡排序
从数组第一个元素x开始,与接下来的每一个元素进行比较,比x小的元素则与x交换位置,比x大则位置不变,直到比较完毕,则开始比较数组第二个元素。冒泡排序是一种稳定的排序算法
时间复杂度:
最好情况:数组开始时便是正序排列:O(n)
最坏:O(n^2)
平均:O(n^2)
选择排序
依次从数组中,按从小到大的顺序选取元素,最小的与数组第一个元素进行交换,然后第二小的和第二个元素进行交换,以此类推,选择排序是一种不稳定的排序算法
时间复杂度:
最好情况:O(n^2)
最坏:O(n^2)
平均:O(n^2)
直接插入排序
将数组元素插入到另一个已排序好的数组当中,在这里可以将数组第一个元素(如a[0])设计为一个哨兵值,每次需要插入的新元素赋值给哨兵值,这样每次就只需要将哨兵值进行比较即可,不用额外开辟数组空间,只需要一个哨兵值的附加空间即可。直接插入排序是一种稳定的排序算法
最好情况:O(n)
最坏:O(n^2)
平均:O(n^2)
快速排序
思想就是取出一个数,然后将比这个数小的放这个数前面,比这个数大的放后面,然后再对前半部分和后半部分分别再用此方法,直到排序成功。快速排序是一种不稳定的算法
最好情况:O(nlogn)
最坏:O(n^2)
平均:O(nlogn)
二分法插入排序
将待排序元素插入一个已排序好的数组,从中间位置开始比较,然后继续采用二分法进行排序插入。二分法插入排序是一种稳定排序算法。
最好情况:O(log₂n)
最坏:O(n^2)
平均:O(n^2)