目录

  1. 1. 前言
  2. 2. 插入排序
    1. 2.1. 直接插入排序
    2. 2.2. 折半插入排序
    3. 2.3. 希尔排序
  3. 3. 交换排序
    1. 3.1. 起泡排序
    2. 3.2. 快速排序
  4. 4. 选择排序
    1. 4.1. 简单选择排序
    2. 4.2. 树形选择排序
    3. 4.3. 堆排序
  5. 5. 归并排序
  6. 6. 基数排序
  7. 7. 外部排序

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

排序

2024/1/23 Basic 数据结构
  |     |   总文章阅读量:

前言

烂尾+2

插入排序

每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止

即边插入边排序,保证子序列中随时都是排好序的

直接插入排序

整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序

例:(13,6,3,31,9,27,5,11)

[13], 6, 3, 31, 9, 27, 5, 11
[6, 13], 3, 31, 9, 27, 5, 11
[3, 6, 13], 31, 9, 27, 5, 11
[3, 6, 13,31], 9, 27, 5, 11
[3, 6, 9, 13,31], 27, 5, 11
[3, 6, 9, 13,27, 31], 5, 11
[3, 5, 6, 9, 13,27, 31], 11
[3, 5, 6, 9, 11,13,27, 31]

折半插入排序

希尔排序

先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序

注:子序列的构成不是简单地“逐段分割”,而是将相隔某个增量dk的记录组成一个子序列让增量dk逐趟缩短(例如依次取5,3,1)直到dk=1为止

image-20240123003655646

第1趟:16,27,38,49,5~10进行比较

第2趟:14,25,36,47,58,69,7~10进行比较

第3趟同理

交换排序

基本思想:两两比较,如果发生逆序则交换,直到所有记录都排好序为止

起泡排序

每趟不断将记录两两比较,并按“前小后大” 规则交换

快速排序

任取一个元素 (如第一个) 为中心

所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表;

对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个

选择排序

从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端

每一趟在后面 n - i +1 个中选出关键码最小的对象, 作为有序序列的第 i 个记录

简单选择排序

树形选择排序

堆排序

归并排序

将两个或两个以上的有序表组合成一个新有序表

基数排序

外部排序