排序基本概念
排序(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个单元一般用作哨兵
分享到:
相关推荐
大二上学期的数据结构课程通常涵盖了一些基本和重要的概念,这些概念在软件开发和算法设计中至关重要。这份"数据结构-大二上复习思维导图"提供了对这一主题的全面概述,主要分为查找、二叉树、排序和复习四个主要...
### C# 数据结构——方法及其应用以及在 .NET 框架中相应的算法 #### 第1章:数据结构和算法的基础概念及C#基础知识 - **数据结构与算法概述**:介绍数据结构与算法的基本定义及其重要性。数据结构是指一组特定...
首先,我们来看"数据结构-绪论-08软件工程.ppt",这是学习的起点,它会介绍数据结构的基本概念,包括什么是数据结构,为什么我们需要数据结构,以及数据结构的主要类型。通常,绪论部分还会讨论数据结构在实际编程中...
- 基本概念:讲解什么是数据结构,包括线性结构(如数组、链表)、树形结构(如二叉树、堆)、图形结构以及散列结构等。 - 抽象数据类型(ADT):介绍ADT的概念,例如栈、队列、集合、映射和优先队列等,以及它们...
浙江大学的《数据结构与算法》课程,通过MOOC平台为广大学习者提供了高质量的教学资源,包括PDF格式的PPT,帮助学生深入理解这一领域的基本概念和实践技能。 首先,我们来看看课程中涉及到的一些主要知识点: 1. *...
数据结构的基本概念包括数组、链表、栈、队列、树、图等。数组是最基础的数据结构,它提供了一种方式来存储和访问固定大小的数据集合。链表则在内存中不连续存放元素,通过指针连接各个节点,解决了数组插入和删除...
【基本概念】 1. 记录与关键码:记录是数据元素的载体,其中的关键码是用于排序的数据项。 2. 排序表:由n个排序记录组成的集合,可以视为一个文件,主要操作是对这些记录进行排序。 3. 序列类型:非递减序列、递减...
在当今信息高度发展的时代,数据结构作为计算机科学与技术领域的一个基本概念,是支撑软件开发高效稳定运行的重要基石。其中,“漫话数据结构-简单选择排序.pptx”这一文档深入浅出地探讨了简单选择排序这一基础且...
《Java版数据结构》是一本非常适合Java程序员的学习资料,不仅涵盖了数据结构与算法的基本概念,还深入探讨了各种高级数据结构与算法的应用。无论是初学者还是有经验的开发者,都能从中获得有价值的信息。通过本书的...
1. 基本概念:理解数据结构的定义,包括逻辑结构(如线性结构、树形结构、图形结构、集合等)和物理结构(如顺序存储、链式存储)。 2. 线性结构:如数组、链表、栈和队列。数组是最基本的数据结构,提供了随机访问...
数据结构中的排序是计算机科学中一个基础且重要的概念,它涉及到如何有效地组织和处理大量数据。排序算法的主要目标是将一组无序的数据元素按照特定的标准(通常是升序或降序)排列成一个有序序列。本篇文章主要介绍...
全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...
郝斌的数据结构教程不仅涵盖了数据结构的基本概念和常见类型,还深入讲解了高级数据结构的原理及应用场景。通过该教程的学习,可以系统地掌握数据结构的相关知识,并能在实际开发工作中灵活运用这些知识解决问题。...
下面将详细阐述排序的基本概念、稳定性和分类,以及内部排序的操作和一个具体的排序算法——直接插入排序。 首先,排序是将一组无序的记录(如数组或链表)重新排列成具有特定顺序的记录序列。在这个过程中,每个...
本文档为中南大学数据结构考研题目,涵盖数据结构与算法分析的基础知识,包括抽象数据类型、数据结构、算法分析、线性表、栈、队列、二叉树、树、排序技术、检索技术、索引技术、图等基本概念和操作。本文档还包括...
首先,我们来看数据结构的基本概念。数据结构主要包括数组、链表、栈、队列、树、图等。数组是最基础的数据结构,它提供了随机访问元素的能力,但在插入和删除元素时效率较低。链表则通过指针连接元素,允许快速插入...
通过张铭教授的课程,学生不仅可以掌握数据结构的基本概念,还能学习到如何在实际问题中应用这些数据结构,从而提升编程能力和问题解决能力。源码部分将帮助学生更好地理解理论知识,通过实践加深对数据结构的理解。...
1. **排序的基本概念**: - **稳定性**:排序算法的稳定性指的是如果原始序列中有相等的关键字,排序后这些相等关键字的相对顺序保持不变。例如,稳定排序算法不会改变两个相同元素的相对位置。 - **比较次数**:...
- **排序的基本概念**:理解排序算法的基本概念,特别是排序的稳定性和时间复杂度的重要性。 - **Shell排序**:掌握Shell排序的基本思想,以及其实现方法。 - **快速排序**:掌握快速排序的基本思想,并能实现该算法...