冒泡排序 O(n^2) 稳定
原理:左右元素依次比较,将最大的放在右边,最后沉底,然后除了最后一个元素之外再进行上述步骤。
最好的情况是直接是正序的,则可以在交换处加个标记,没交换的情况直接跳出。这样的复杂度就为O(n)。
直接插入排序 O(n^2) 稳定
原理:在逻辑上可以将数组分为两部分,前部分有序,后部分无序,从后一部分的数组中依次取出数字与前面有序部分从后往前依次比较,插入到合适的位置,直到后面部分没有元素为止。
快速排序 O(nlogn)
原理:先从元素中选择一个数作为基准,然后将整个数组与之比较,大的放右边,小的放左边(即分区操作),然后再对左边和右边的子集都进行相同的操作,直到所有子集都只有一个元素。
堆排序 O(nlogn)
原理:每个堆都是完全二叉树,分为大顶堆和小顶堆,大顶堆即节点大于等于其左右孩子,小顶堆反之。所以首先需要调整至大顶堆的结构,找到左边最后一个非叶子节点,进行调整,保证节点大于叶子,然后依次往上调整。调整好后,再将根节点和最后一个叶子进行交换。然后再继续调整结构,使其满足大顶堆结构,再继续交换直到换完为止。
希尔排序 O(nlogn)~O(n^2)
原理:将数组分为lenth/2各组,依次间隔,每个组分别进行大小比较,进行交换。再将其分为length/2/2组,进行插入排序。直到最后分为一组,只用进行一遍循环调整就可以得到正确顺序。
选择排序 O(n^2) 稳定
原理:逻辑上分为两个部分,前一个部分装有序的数组,后一部分装有序部分,后面部分进行筛选,依次选出最小的数放在前一部分的最后。