zl程序教程

您现在的位置是:首页 >  后端

当前栏目

算法笔记之排序

2023-09-27 14:22:51 时间

最近在看《算法笔记》,如果单从算法来说,这本书真正做到了短小精悍,首先以排序入题,那么我们今天也来说说排序。

排序

将一堆杂乱无章的元素按照某种规则有序排列的过程就叫“排序”.排序是一种非常基础的算法,有着广泛的理论和实践基础。对一个排序算法来说,一般从如下3个方面衡量算法的优劣:
  • 时间复杂度:主要是分析关键字的比较次数和记录的移动次数。
  • 空间复杂度:分析排序算法中需要多少辅助内存
  • 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种算法是稳定的;反之,就是不稳定的。

排序算法很多,我们按是否可以实现排序分为比较排序和非比较排序,在比较排序中常见的有,比较排序,梳排序,堆排序,归并排序,快递排序,内省排序等,非比较排序如,通排序,基数排序等。如果按传统的分类,则可以分为插入排序、折半插入排序、Shell排序、归并排序、直接选择排序、堆排序、冒泡排序、快速排序、桶式排序、基数排序等,各大排序基于不同的场景设置,各有优势。接下来就选取几个常见的说明。

比较排序

在常见的排序算法中,大多数排序都属于这一种。在比较排序中,排序对象可以是任何类型,我们只需要知道如何比较两个对象的大小。
定义1(基于比较的排序)
给定一个包含n个对象的待排序对象a1,a2...an。假设我们知道如何比较其中任意两个对象的大小,那么我们就可以对这列数据进行排序。
基于比较排序必须