排序算法
发布于
排序的基本操作:比较和移动
直接插入排序
分为有序区和无序区,每一次从无序区里找一个最小的放在有序区
希尔排序
先分组,两个数一组,比较交换,小的放在前面,一直这样比较
冒泡排序
两个数比较最小的放在前面,第一轮排序结束,第一个数一定是最小的,每一次从无序区中选取一个最小的
快速排序
随机选择一个数进行比较,一般情况下选择第一数为关键字,经过第一轮排序后,关键字前面都是比他小的,关键字后面都是比他大的 先从最后面开始比较,如果比关键字小,关键字和他换位置,然后从最前面往后扫描,比关键字大的,和关键字换位置,然后再从最后面开始扫描
简单选择排序
每一次都从无序区中选取一个最小的放在最前面
堆排序
每一次都是全部比较,最大的放在前面即根节点,然后输出根节点
堆排序的插入:插入一个数放在最后面,保证父节点的数比子节点的数大即可
堆排序的删除:删除一个数后,保证父节点的数比子节点大即可
归并排序
先分组,组内排序 一开始是2个一组,四个一组,八个一组
基数排序
不用进行关键字的比较,第一次比较按照个位数排列,第二趟按照十位数排列,第三位按照百位排列
基数排序的移动次数与关键字的排列次序无关
排列趟数和序列的初始状态无关的排序方法是 直接插入排序、简单选择排序、基数排序
每趟排列结束之后都至少能确定一个元素的最终位置的方法是 简单选择排序、快速排序、堆排序
最后一趟结束前,所有元素不一定归位:直接插入排序、希尔排序、
快速排序在原始序列无序的时候,速度最快