Skip to content

排序算法

冒泡排序:

依次相邻两个数,进行位置交换,
在一次遍历后确定出最大或最小的数,
再遍历确定次大或次小的数遍历的次数也会减一,
以此论推,直到需要遍历的次数为0

关键字: 比较相邻
参考:冒泡排序


选择排序:

遍历数组,找到最大或最小的值放入第一个位置,
一次遍历过后第一个位置会是
最大或最小值,然后插入位置加一,
以此论推,直到插入位置到数组最后一个位置

关键字: 选择最大或最小
参考:选择排序


插入排序:

从第一个数开始,作为基准数,比它大或小的数移动到它前面,
若不交换位置基准数为新的数,从基准数开始进行下一轮排序,
若交换位置那这个位置之前如果还有数,则进行比较,直到确定位置,
以此论推,直到基准数为最后一个数

关键字:插入到基准数前面
参考:插入排序


快速排序:

选择第一个数,遍历数组,比它大的放前面,比它小的放后面,
一次遍历后将数组分割成两个单元,以此论推,分别处理每个单元,
直到单元长度为一

关键字:分割数组为左右两块
参考:图解排序算法(五)之快速排序——三数取中法


归并排序:

第一次遍历将数组两两归并,排序,之后遍历将子序列两两归并,
以此论推,生成新的子序列并归并,直到只剩一个子序列,即所以子序列归并完成,
归并操作关键在于,以一个序列中的第一个数比较另一个序列中的所有数,
最大或最小的取出放到一个最终队列中,直到一个序列为空,
然后将另一个队列中的数放到最后队列中它的后面

关键字:分子序列,排序,合并序列,分治法(Divide and Conquer)
参考:图解排序算法(四)之归并排序


希尔排序:

确定一个增量(推荐为长度一半),以这个跨度依次选择数,
直到没有可选择的数,即第一次选择第一个数和跨过这个增量的另一数,
继续选择直到没有可选择数,对这些数进行插入排序,
第二次选择第二个数和跨度下的另一数,
继续选择直到没有可选择数,进行插入排序, 依次进行,直到所有的数都进行了排序,
第一次遍历完成,后面的排序缩小增量,然后选择数,进行排序,以此论推,
直到增量为一

关键字:增量,跨度选取,插入排序
参考:图解排序算法(二)之希尔排序


堆排序:

基于二叉树的选择排序

关键字:二叉树,选择排序
参考:图解排序算法(三)之堆排序


二叉树:

每个结点最多有两个子树,二叉树的子树有左右之分,次序不能颠倒 二叉树,B树之类持续更新


B-Tree:

每个结点包含:本结点所含关键字的个数;指向父结点的指针;关键字;指向子结点的指针数组;二叉树学习笔记之B树、B+树、B*树