【数据结构之排序1】排序的基本概念

转载 2013年10月21日 15:41:52

排序(sort)或分类


所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:
输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。
输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。

1.被排序对象--文件

被排序的对象--文件由一组记录组成。
记录则由若干个数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。
注意:
在不易产生混淆时,将关键字项简称为关键字。

2.排序运算的依据--关键字

用来作排序运算依据的关键字,可以是数字类型,也可以是字符类型。
关键字的选取应根据问题的要求而定。
【例】在高考成绩统计中将每个考生作为一个记录。每条记录包含准考证号、姓名、各科的分数和总分数等项内容。若要惟一地标识一个考生的记录,则必须用"准考证号"作为关键字。若要按照考生的总分数排名次,则需用"总分数"作为关键字。


排序的稳定性


当待排序记录的关键字均不相同时,排序结果是惟一的,否则排序结果不唯一。
在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的
注意:
排序算法的稳定性是针对所有输入实例而言的。即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,则该排序算法就是不稳定的。


排序方法的分类


1.按是否涉及数据的内、外存交换分

在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内、外存交换,则称之为内部排序(简称内排序);反之,若排序过程中要进行数据的内、外存交换,则称之为外部排序
注意:
①内排序适用于记录个数不很多的小文件
②外排序则适用于记录个数太多,不能一次将其全部记录放人内存的大文件。

2.按策略划分内部排序方法

可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。


排序算法分析


1.排序算法的基本操作

大多数排序算法都有两个基本的操作:
(1) 比较两个关键字的大小;
(2) 改变指向记录的指针或移动记录本身。
注意:
第(2)种基本操作的实现依赖于待排序记录的存储方式。

2.待排文件的常用存储方式

(1) 以顺序表(或直接用向量)作为存储结构
排序过程:对记录本身进行物理重排(即通过关键字之间的比较判定,将记录移到合适的位置)

(2) 以链表作为存储结构
排序过程:无须移动记录,仅需修改指针。通常将这类排序称为链表(或链式)排序;

(3) 用顺序的方式存储待排序的记录,但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)
排序过程:只需对辅助表的表目进行物理重排(即只移动辅助表的表目,而不移动记录本身)。适用于难于在链表上实现,仍需避免排序过程中移动记录的排序方法。

3.排序算法性能评价

(1) 评价排序算法好坏的标准
评价排序算法好坏的标准主要有两条:
① 执行时间和所需的辅助空间
② 算法本身的复杂程度

(2) 排序算法的空间复杂度
若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间是O(1),则称之为就地排序(In-PlaceSou)。
非就地排序一般要求的辅助空间为O(n)。

(3) 排序算法的时间开销
大多数排序算法的时间开销主要是关键字之间的比较和记录的移动。有的排序算法其执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态。

文件的顺序存储结构表示

  #define n l00 //假设的文件长度,即待排序的记录数目
  typedef int KeyType; //假设的关键字类型
  typedef struct{ //记录类型
    KeyType key; //关键字项
    InfoType otherinfo;//其它数据项,类型InfoType依赖于具体应用而定义
   }RecType;
  typedef RecType SeqList[n+1];//SeqList为顺序表类型,表中第0个单元一般用作哨兵

注意:
若关键字类型没有比较算符,则可事先定义宏或函数来表示比较运算。
【例】关键字为字符串时,可定义宏"#define LT(a,b)(Stromp((a),(b))<0)"。那么算法中"a<b"可用"LT(a,b)"取代。若使用C++,则定义重载的算符"<"更为方便。




原文地址:http://student.zjzk.cn/course_ware/data_structure/web/main.htm

数据结构中排序方法基本概念 及 分类

排序的基本概念:所谓排序,即将原来无序的一个序列重新排列成有序的序列。注意这个序列中的每一项可能是单独的数据元素,也可能是一条记录(记录是由多个数据元素组成的,例如一个学生记录就是有学号 姓名 年龄 ...

《大话数据结构》第9章 排序 9.2 排序的基本概念与分类

9.2 排序的基本概念与分类 9.2.1 排序的定义         排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录...

数据结构之排序:排序基本概念和各种排序方法总结

排序的分类内部排序与外部排序按照排序过程设计的存储器的不同分为内部排序与外部排序。内部排序完全在内存中进行,适合数据量不太大的数据元素的排序。外部排序需要访问外部存储器,待排序的数据元素非常多,以至于...

考研数据结构学习1:绪论(上) 基本概念

正式走上工作岗位两周了,⊙﹏⊙b汗

数据结构与算法(1)-基本概念

基本概念 一、数据与数据结构 数据:所有能被输入到计算机中,且能被计算机处理的所有符号的集合的对象的总称,是计算机处理的信息的某种特定的符号表示形式。 数据元素:数据中的一个“个体”,数据元素师数据结...

数据结构与算法Java版——九大基本排序算法(1)

这次分享的主题是排序算法,排序是数据处理中经常用到的一种操作,主要目的就是为了查找,在数据大量时,不同的算法有不同的效果。   排序板块是目前我的写的数据结构与算法Java版的最后一块内容,...

hoops_3D基本概念和数据结构

  • 2014年05月18日 01:40
  • 61KB
  • 下载

基本算法和数据结构回顾(1)–排序

基本算法和数据结构回顾(1)–排序 作者:gaopenghigh ,转载请注明出处。 (原文地址) 个人感觉,学习算法和数据结构后一段时间,往往会忘掉很多东西,于是我给自己写了这 个回...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构之排序1】排序的基本概念
举报原因:
原因补充:

(最多只允许输入30个字)