排序算法

排序的基本操作:比较和移动

直接插入排序

分为有序区和无序区,每一次从无序区里找一个最小的放在有序区

希尔排序

先分组,两个数一组,比较交换,小的放在前面,一直这样比较

冒泡排序

两个数比较最小的放在前面,第一轮排序结束,第一个数一定是最小的,每一次从无序区中选取一个最小的

快速排序

随机选择一个数进行比较,一般情况下选择第一数为关键字,经过第一轮排序后,关键字前面都是比他小的,关键字后面都是比他大的 先从最后面开始比较,如果比关键字小,关键字和他换位置,然后从最前面往后扫描,比关键字大的,和关键字换位置,然后再从最后面开始扫描

简单选择排序

每一次都从无序区中选取一个最小的放在最前面

堆排序

每一次都是全部比较,最大的放在前面即根节点,然后输出根节点

堆排序的插入:插入一个数放在最后面,保证父节点的数比子节点的数大即可

堆排序的删除:删除一个数后,保证父节点的数比子节点大即可

归并排序

先分组,组内排序 一开始是2个一组,四个一组,八个一组

基数排序

不用进行关键字的比较,第一次比较按照个位数排列,第二趟按照十位数排列,第三位按照百位排列

基数排序的移动次数与关键字的排列次序无关

排列趟数和序列的初始状态无关的排序方法是 直接插入排序、简单选择排序、基数排序

每趟排列结束之后都至少能确定一个元素的最终位置的方法是 简单选择排序、快速排序、堆排序

最后一趟结束前,所有元素不一定归位:直接插入排序、希尔排序、

快速排序在原始序列无序的时候,速度最快