数据结构之排序(一)——基本概念

  • 排序:将一组杂乱无章的数据按一定规律顺次排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。
    如果参加排序的数据结点包含多个数据域,那么排序往往是针对其中某个域而言的。

  • 排序的应用

    • 软件中的直接应用,如按某个域排序,方便查找
    • 程序中的简介应用
      • 二分查找法
      • 最短路径、最小生成树等
  • 排序方法的分类

    • 按数据存储介质:内部排序和外部排序
    • 按比较器个数:串行排序和并行排序
    • 按主要操作:比较排序和基数排序
    • 按辅助空间:原地排序和非原地排序
    • 按稳定性:稳定排序和非稳定排序
    • 按自然性:自然排序和非自然排序

下面逐个介绍。

  • 按存储介质分为

    • 内部排序:数据量不大,数据在内存,无需内外存交换数据。
    • 外部排序:数据量大,数据在外存(文件排序)
      外部排序时,要将数据分批调入内存来排序,中间结果还要及时放入外存,显然外部排序要复杂。
  • 按比较器分为

    • 串行排序:单处理机(同一时刻比较一对元素)
    • 并行排序:多处理机(同一时刻比较多对元素)
  • 按主要操作分为

    • 比较排序:用比较的方法
    插入排序、交换排序、选择排序、归并排序
    • 基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。
  • 按辅助空间分为

    • 原地排序:辅助空间用量为 O ( 1 ) O(1) O(1)的排序方法。
      所占的辅助存储空间与参加排序的数据量大小无关
    • 非原地排序:辅助空间用量超过 O ( 1 ) O(1) O(1)的排序方法。
  • 按稳定性分为

    • 稳定排序:能够使任何数值相等的元素,排序以后相对次序不变。
    • 非稳定性排序:不是稳定排序的方法。
      在这里插入图片描述
      示例1是稳定排序,因为排序前后值为49的元素的相对位置没有发生改变,而示例2为非稳定排序。
      排序的稳定性只对结构类型数据排序有意义,并不能衡量一个排序算法的优劣。
      在这里插入图片描述
  • 按自然性分为

    • 自然排序:输入数据越有序,排序的速度越快的排序方法。
    • 非自然排序:不是自然排序的方法。
  • 后面主要介绍以下几种排序

    • 插入排序:直接插入排序、折半插入排序、希尔排序
    • 交换排序:冒泡排序、快速排序
    • 选择排序:简单选择排序、堆排序
    • 归并排序:2-路归并排序
    • 基数排序
  • 排序的工作量:

    • 简单的排序方法: T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2)
    • 先进的排序方法: T ( n ) = O ( n l o g n ) T(n)=O(nlogn) T(n)=O(nlogn)
    • 基数排序: T ( n ) = O ( d ∗ n ) T(n)=O(d*n) T(n)=O(dn)

以上这些排序都是基于顺序表的存储结构进行的。

#define MAXSIZE 20         //设记录不超过20个
typedef int KeyType;       //设关键字的类型为整型

typedef struct             //定义每个记录的结构
{
	KeyType key;           //关键字
	InfoType otherinfo;    //其他数据项
}RedType;

typedef struct             //定义顺序表的结构
{
	RedType r[MAXSIZE + 1];//存储顺序表的数组,r[0]一般作哨兵或缓冲区
	int length;            //顺序表长度
}SqList;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值