插入排序
直接插入排序
具体算法:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2-5。
希尔排序
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
希尔排序实质上是一种分组直接插入方法。
基本思想:
对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;
然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。
然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,即所有记录放在同一组中进行直接插入排序为止, 整个数列就是有序的。
选择排序
直接选择排序
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
堆选择排序
什么是堆?
堆结构有很多种,如二叉堆、B堆、斐波那契堆、三元堆,树堆、弱堆等。
二叉堆是堆实现中最流行的一种。二叉堆是一个完全二叉树,树的所有内部节点都被完全填充,最后一层可以完全填充的或部分填充。通俗的说,堆(二叉堆)可以视为一棵
完全的二叉树。完全二叉树的一个优秀的性质就是,除了最底层之外,每一层都是满的。堆又分为最大堆(堆顶Root是最大值)和最小堆(堆顶Root是最小值)。
总结一下,只要你是一个完全二叉树,父节点又大于子节点,你就是堆。
完全二叉树 + 父节点大于(或小于)子节点 = 堆
交换排序
冒泡排序
从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,
直到所有数据元素都排好序。
快速排序
归并排序
归并排序算法完全遵循分治模式。直观上其操作如下:
分解:分解等排序的n个元素的序列成各具n/2个元素的两个子序列;
解决:使用归并排序递归地排序两个子序列;
合并:合并两个已排序的子序列以产生已排序的答案。