软件设计师考试 第三章 数据结构 排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件设计师考试 第三章 数据结构 排序相关的知识,希望对你有一定的参考价值。
参考技术A假设含 n 个记录的文件内容为 R1,R2,...,Rn ,相应的关键字为 k1,k2,...,kn 。经过排序确定一种排列 Rj1,Rj2,...,Rjn ,使得它们的关键字满足以下递增(或递减)关系: kj1<=kj2<=...<=kjn(或kj1>=kj2>=...>=kjn) 。
排序方法的稳定与不稳定:
内部排序和外部排序:
方法: 在插入第 i 个记录时, R1,R2,...,Ri-1 已经排好序,这时将 Ri 的关键字 ki 依次与关键字 ki-1,ki-2 等进行比较,从而找到应该插入的位置并将 Ri 插入,插入位置及其后的记录依次向后移动。
直接插入排序 是一种 稳定 的排序方法 , 时间复杂度为O(n^2),空间复杂度为O(1)。
方法: 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换这两个记录的值,然后比较第二个记录和第三个记录的关键字,依此类推,直到第 n-1 个记录和第 n 个记录的关键字比较过为止。上述过程称为第一趟冒泡排序,然后再进行多次冒泡排序,直到冒泡排序过程中没有进行相邻位置的元素交换处理为止。
冒泡排序 是一种 稳定 的排序方法 , 时间复杂度为O(n^2),空间复杂度为O(1)。
方法: 通过 n-i (1<=i<=n) 再次关键字之间的比较,从 n-i+1 个记录中选出关键字最小的记录,并和第 i 个记录进行交换,当 i 等于 n 时所有记录有序排列。
简单选择排序 是一种 不稳定 的排序方法 , 时间复杂度为O(n^2),空间复杂度为O(1)。
又称为“缩小增量排序”,它是对直接插入排序方法的改进。
方法: 先将整个待排序记录分割成若干子序列,然后分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。具体做法是:先取一个小于 n 的整数 d1 作为第一个增量,把文件的全部记录分成 d1 个组,即将所有距离为 d1 倍数序号的记录放在同一个组中,在各组内进行直接插入排序;然后取第二个增量 d2 (d2<d1) ,重复上述分组和排序工作,依此类推,直到所取的增量 di=1 (di<di-1<...<dc<d1) ,即所有记录放在同一组进行直接插入排序为止。
希尔排序 是一种 不稳定 的排序方法 , 时间复杂度为O(n^1.3),空间复杂度为O(1)。
方法: 附设两个位置指示变量 i 和 j ,它们的初值分别指向序列的第一个记录和最后一个记录。设枢轴记录(通常是第一个记录)的关键字为 pivot ,则首先从 j 所指位置起向前搜索,找到第一个关键字小于 pivot 的记录时将记录向前移到 i 指示的位置,然后从 i 所指位置起向后搜索,找到第一个关键字大于 pivot 的记录时将该记录后移到 j 所指位置,重复该过程直至 i 与 j 相等为止。
快速排序 是一种 不稳定 的排序方法 , 时间复杂度为O(nlogn),空间复杂度为O(logn)。
方法: 对一组待排序记录的关键字,首先按堆的定义排成一个序列(即建立初始堆),从而可以输出堆顶的最大关键字(对于大根堆而言),然后将剩余的关键字再调整成新堆,便得到次大的关键字,如此反复,直到全部关键字排成有序序列为止。
堆排序 是一种 不稳定 的排序方法 , 时间复杂度为O(nlogn),空间复杂度为O(1)。
方法: 将两个或两个以上的有序文件合并成一个新的有序文件。实现方法是:把一个有 n 个记录的无序文件看成是由 n 个长度为 1 的有序子文件组成的文件,然后进行两两归并,得到 n/2 个长度为 2 或 1 的有序文件,再两两归并,如此重复,直到最后形成包含 n 个记录的有序文件为止。
归并排序 是一种 稳定 的排序方法 , 时间复杂度为O(nlogn),空间复杂度为O(n)。
方法: 设立 r 个队列,队列的编号分别为 0、1、2、...、r-1 。首先按最低有效位的值把 n 个关键字分配到这 r 个队列中;然后按照队列编号从小到大将各队列中的关键字依次收集起来;接着再按次低有效位的值把刚收集起来的关键字分配到 r 个队列中。重复上述分配和收集过程,直到按照最高有效位分配和收集。这样就得到一个从小到大有序的关键字序列。
对于 n 个记录,执行一次分配和收集的时间为 O(n+r) 。如果关键字有 d 位,则要执行 d 便。所以总的运算时间为 O(d(n+r)) 。
基数排序 是一种 稳定 的排序方法 , 时间复杂度为O(d(n+rd)),空间复杂度为O(rd)。
各个排序方法的性能比较:
外部排序是对大型文件的排序,待排序的记录存放在外存。
常用的外部排序方法是归并排序。
二级(JAVA语言程序设计)考试大纲
二级(Java 语言程序设计)考试大纲
2021计算机Java二级考试四十五套题真题【收藏版】(一周裸考计划)
基本要求
1.掌握算法的基本概念
2.掌握基本数据结构及其操作。
3.掌握基本排序和查找算法。
4.逐步求精的结构化程序设计方法。
5.软件工程的基本方法,具有初步应用技术进行软件开发的能力。
6.数据库的基本知识,数据库设计有关的方法命令。
考试内容
一 基本数据结构和算法
- 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。
- 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。
- 线性表的定义;线性表的顺序存储结构及其插入与删除运算。
- 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。
- 线性单链表、双向链表与循环链表的结构及其基本运算。
- 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。
- 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。
二 程序设计基础
- 程序设计方法与风格。
- 结构化程序设计。
- 面向对象的程序设计方法,对象,方法,属性及继承与多态性。
三 软件工程基础
- 软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。
- 结构化分析方法,数据流图,数据字典,软件需求规格说明书。
- 结构化设计方法,总体设计与详细设计。
- 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。
- 程序的调试,静态调试与动态调试。
四 数据库设计基础
- 数据库的基本概念:数据库,数据库管理系统,数据库系统。
- 数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。
- 关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。
- 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。
考试方式
1. 公共基础知识不单独考试,与其他二级科目组合在一起,作为二级科目考核内容的一部分。
2. 上机考试,10道单项选择题,占10分。
Java 语言程序设计
基本要求
- 掌握Java语言的特点,实现机制和体系结构。
- 掌握Java语言中面向对象的特性。
- 掌握Java语言提供的数据类型和结构。
- 掌握Java语言编程的基本技术。
- 会编写Java用户界面程序。
- 会编写Java简单应用程序。
- 会编写Java小应用程序(Applet)。
- 了解Java语言的广泛应用。
考试内容
一、Java语言的特点和实现机制
二、Java体系结构
- Java程序结构。
- Java类库结构。
- Java程序开发环境结构。
三、Java语言中面向对象的特性
- 面向对象编程的基本概念和特征。
- 类的基本组成和使用。
- 对象的生成、使用和删除。
- 包与接口。
- Java类库的常用类和接口。
四、Java简单数据类型及运算
- 变量和常量。
- 基本数据类型及转换。
- Java类库中对基本数据类型的类包装。
- 运算符和表达式运算。
- 字符串和数组。
五、Java语言的基本语句
- 条件语句。
- 循环语句。
- 注释语句。
- 异常处理语句。
- 表达式语句。
六、Java编程技术基础
- 输入输出流及文件操作。
- 线程的概念和使用。
- 程序的同步与共享。
- Java语言的继承、多态和高级特性。
- 异常处理和断言概念。
- Java语言的集合(Collections)框架和泛型概念。
七、编写用户界面程序基础
- 用AWT编写图形用户界面的基本技术。
- 用Swing编写图形用户界面的特点。
- Swing的事件处理机制。
八、编写小应用程序(Applet)基础
- Applet类的API基本知识。
- Applet编写步骤及特点。
- 基于AWT和Swing编写用户界面。
- Applet的多媒体支持和通信。
考试方式
上机考试,考试时长120分钟,满分100分。
- 题型及分值
单项选择题40分(含公共基础知识部分10分)、操作题60分(包括基本操作题、简单应用题及综合应用题)。 - 考试环境
NetBeans。
以上是关于软件设计师考试 第三章 数据结构 排序的主要内容,如果未能解决你的问题,请参考以下文章