数据结构课程设计53361

合集下载

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计完整版

数据结构课程设计完整版

通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。

在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。

计算机管理的好处在于利用它能够进行信息储存以及信息编辑。

用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。

通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。

其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。

用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人们带来更多的方便。

通讯录信息系统的主要功能清单如下:1) 建立通讯录链表;2) 通讯者结点的插入(按编号的次序插入有序通讯录表);3) 通讯者信息的查询(按编号或姓名查找通讯者信息);4) 通讯者信息的删除(按编号或姓名删除通讯者信息);5) 通讯录的显示(显示所有通讯者信息列表);6) 通讯录信息系统的退出测试数据见调试分析。

二.详细设计算法分析:↓↓↓↓↓↓主函数流程图:主函数流程图创建函数流程图:显示通讯录流程图:查找函数流程图(1)find函数:find函数流程图(2)search函数Search函数流程图删除操作流程图:插入函数流程图:退出函数流程图:图11退出函数流程图3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。

在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示:(链表非空的查找)在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139********Wuhan2wwnv132********Wuhan再在主菜单输入1后,程序显示如图所示:在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得:通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。

二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。

在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。

三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。

2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。

3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。

4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。

5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。

四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。

2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。

通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。

3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。

链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。

在实现链表时,我们定义了一个节点结构,包含数据域和指针域。

通过指针的方式将节点连接起来,形成一个链式结构。

同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。

4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。

数据结构 课程设计

数据结构 课程设计

数据结构课程设计一、引言数据结构是计算机科学中的一个重要概念,它研究如何组织和存储数据,以便能高效地访问和操作。

在计算机科学的许多领域中,数据结构都起着至关重要的作用,如数据库、图形处理、人工智能等。

本文将介绍数据结构的概念、分类以及在课程设计中的应用。

二、数据结构的概念数据结构是指一组数据元素和它们之间的关系。

它描述了数据的逻辑结构和物理存储方式。

数据结构可以分为线性结构和非线性结构。

线性结构是指数据元素之间存在一对一的关系,如数组、链表、栈和队列。

其中,数组是一种连续存储的线性结构,它的元素在内存中是连续存储的;链表是一种离散存储的线性结构,它的元素在内存中是分散存储的;栈和队列是特殊的线性结构,它们分别具有后进先出和先进先出的特点。

非线性结构是指数据元素之间存在一对多或多对多的关系,如树和图。

树是一种分层存储的非线性结构,它由节点和边组成;图是一种多对多关系的非线性结构,它由顶点和边组成。

三、数据结构的分类根据数据的组织方式和访问方式,数据结构可以分为以下几种类型:1.数组:将相同类型的数据元素按顺序存储在连续的内存空间中,可以通过下标访问元素。

2.链表:将数据元素存储在离散的内存空间中,通过指针将各个元素连接起来。

3.栈:一种特殊的线性结构,只允许在一端进行插入和删除操作,遵循后进先出的原则。

4.队列:一种特殊的线性结构,允许在一端进行插入操作,在另一端进行删除操作,遵循先进先出的原则。

5.树:一种分层存储的非线性结构,由节点和边组成,每个节点可以有多个子节点。

6.图:一种多对多关系的非线性结构,由顶点和边组成,顶点之间可以有多条边。

7.堆:一种特殊的树形结构,用于实现优先队列等数据结构。

8.散列表:通过散列函数将数据映射到散列表中的位置,实现快速的插入和查找操作。

四、数据结构在课程设计中的应用数据结构在计算机科学的各个领域中都有广泛的应用,下面就以一个简单的课程设计为例,介绍数据结构在其中的应用。

数据结构课程设计(5篇)

数据结构课程设计(5篇)

数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。

三、具体要求1)利用完全二叉树的性质建立一棵二叉树。

(层数不小于4层)2)统计树叶子结点的个数。

3)求二叉树的深度。

4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。

四、进度安排依照教学计划,课程设计时间为:2周。

本设计要求按照软件工程的基本过程完成设计。

建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。

三个阶段时间分配的大概比例是:35: 45: 20。

五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。

其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。

4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。

5、源代码要求在关键的位置有注释,增加程序的可读性。

程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。

数据结构课程设计(附代码)-数据结构设计说明

数据结构课程设计(附代码)-数据结构设计说明

应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。

输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。

存储结构:采用线性链式结构。

(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

数据结构课程设计

数据结构课程设计

数据结构课程设计1. 引言数据结构是计算机科学中非常重要的一门课程,它研究将数据组织和存储在计算机中的方法。

为了更好地掌握数据结构的理论知识和实践能力,本课程设计将帮助学生深入了解和应用各种常见的数据结构。

2. 课程设计目标本课程设计的主要目标是帮助学生掌握以下内容:- 理解不同数据结构的特点和适用场景;- 掌握常见数据结构的实现原理和相关算法;- 能够灵活运用数据结构解决实际问题;- 培养学生的编程能力和问题解决能力。

3. 课程设计内容3.1 线性数据结构线性数据结构是数据元素之间存在一对一关系的数据结构,包括数组、链表、队列和栈等。

学生需要通过实例讲解和编程实践来理解它们的概念和实现方法,例如使用数组实现队列和栈等。

3.2 树形数据结构树形数据结构是一种重要的非线性数据结构,包括二叉树、二叉搜索树、堆和哈希表等。

学生需要学习树的基本概念、遍历算法和相关实现方式,如平衡二叉树的调整和哈希函数的设计等。

3.3 图形数据结构图形数据结构是由节点和边组成的复杂数据结构,包括有向图和无向图等。

学生需要了解图的基本概念、图的遍历算法和最短路径算法等。

通过编程实践,学生可以实现常见的图算法,如深度优先搜索和广度优先搜索等。

4. 课程设计实践4.1 编程作业学生将通过完成一系列编程作业来应用所学的数据结构知识。

每个作业都与实际问题密切相关,例如实现一个通讯录管理系统,利用二叉搜索树实现一个字典等。

通过这些作业,学生将深入理解数据结构的应用和实现。

4.2 小组项目学生将分组进行一个小组项目,用于解决一个与数据结构相关的实际问题。

例如,通过利用图算法实现地图导航系统,或者使用哈希表进行文本搜索和替换等。

这些项目将要求学生合作解决问题,提高他们的团队合作能力和创新能力。

5. 课程设计评估为了评估学生对数据结构的掌握程度,将进行以下评估方式:- 编程作业的完成情况和代码质量;- 小组项目的展示和实际应用效果;- 期末考试,包括理论知识和问题解决能力的考察。

《数据结构》课程设计

《数据结构》课程设计

《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。

课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。

2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。

3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。

本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。

课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。

二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。

主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。

2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。

3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。

4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。

5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书课程名称:数据结构和算法设计题目:多种排序院系:计算机科学与信息工程学院学生:学号:专业班级:计科嵌入式(12-1)指导教师:年月日课程设计任务书多种排序摘要:排序是算法中最基础的问题之一,经典的排序算法是前人不断总结得到的,基于比较的方法是比较直观的方式,主要存在插入法排序、堆排序、希尔排序、归并排序、快速排序,每一种排序算法都有自己的优缺点,比如插入法排序适用于那些长度短的排序,要是长的话,有些爱莫能助啦,堆排序主要是依据了二叉堆的特性,但是创建堆的过程也是一个复杂的问题,希尔排序的过程是一个不断精确的过程,但是目前也只是一个经验方式。

归并排序是一个递归的问题,采用分治的思想实现,但是这种算法需要额外的存储空间,快速排序虽然是实践中比较常用的算法,但是对于有序的数组采用快速排序就是灾难。

比较型算法的时间复杂度最优也只能到达O(NlogN)。

关键词:归并排序快排排序选择排序冒泡排序插入排序堆排序希尔排序部排序目录1. 设计背景 (4)1.1问题描述 (4)1.2 问题分析 (4)2.设计方案 (4)2.1 算法设计 (4)2.2 功能模块分析 (6)3.主要算法流程图 (15)4. 结果与结论 (16)4.1正确结果 (16)4.2错误信息 (18)5. 算法复杂度以及稳定性分析 (18)6. 收获与致 (19)7. 参考文献 (19)8. 附件 (20)1. 设计背景1.1问题描述利用随机函数产生N个随机整数(10000以上),对这些数进行多种方法进行排序。

包括:插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序。

1.2 问题分析经典的排序算法是前人不断总结得到的,基于比较的方法是比较直观的方式,主要存在插入法排序、堆排序、希尔排序、归并排序、快速排序,每一种排序算法都有自己的优缺点。

2.设计方案2.1 算法设计(1)选择排序在待排序的一组数据元素中,选出最小的一个数据元素与第一个位置的数据元素交换;然后在剩下的数据元素当中再找最小的与第二个位置的数据元素交换,循环到只剩下最后一个数据元素为止。

(2)冒泡排序相邻的两个元素进行比较,将小的调到前面,大的调到后面。

(3)插入排序待排序的记录放在数组R[0…n-1]中排序过程中某一时刻,R被划分成两个子区间R[0,i-1] (有序和)R[i…n-1](无序)。

直接插入的基本操作是将当前无序区的一个记录R[i]插入到有序区R[0…i-1]中适当的位置(4)快速排序在待排序的数组的n个元素中取一个元素(一般取第一个),将其移动到这样的位置:在其之前的元素的值都小于它,在其之后的元素都大于它,这样是一趟快速排序;然后对数组的两个部分进行同样的操作,直到每部分只有一个记录为止;总之,每趟使表的第一个元素放在适当位置,将表两分,再对两子表进行同样的递归划分,直至划分的子表长度为1。

(5)堆排序堆排序中 heap 算法的时间复杂度与堆所对应的完全二叉树的树高度 log2n 相关。

而heapsort 中对heap 的调用数量级为n,所以堆排序的整个时间复杂度为O(nlog2n) 。

并且堆排序是不稳定的。

堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。

(6)归并排序将两个或两个以上的有序表组成一个新的有序表。

(7)希尔排序将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。

增量的选择:在每趟的排序过程都有一个增量,至少满足一个规则增量关系 d[1] > d[2] > d[3] >..> d[t] = 1 (t趟排序);根据增量序列的选取其时间复杂度也会有变化,这个不少论文进行了研究,在此处就不再深究;本文采用首选增量为n/2,以此递推,每次增量为原先的1/2,直到增量为1。

2.2 功能模块分析1.数据输入:采取随机函数实现输入数据表。

int input_num(){printf("您要给多少个数排序?\n\t\t");scanf("%d",&data_num);srand(NULL);printf("随机产生%d个数:\n\t\t",data_num);for(int i=1;i<=data_num;i++){data_array[i]=rand()%10000000;printf("%d\n",data_array[i]);old[i]=data_array[i];printf("\n\t\t");}}2.数据输出:for循环输出即可。

int outnew0(){printf("排序后的结果为:");for(int i=data_num;i>=1;i--)printf("%d%s",data_array[i],i!=1?" ":"\n");}其中增加了输出空格与换行区别。

3.主界面实现:printf("DATE:May twenty 2014\n");printf("All Copyright Reserved 2014-2015 Wang Guangchun \n");printf("ADDRESS: 604 AYIT\r\n\n\n");printf("——————————————————— \n");printf("——————各种排序比较————————— \n");printf("默认从大到小输出,可以选择9进行切换\n");printf("——————————————————— \n");printf(" * * \n");printf(" * * * \n");printf(" * * \n");printf(" * 520 * \n");printf(" * 欢迎 * \n");printf(" * 使用 * \n");printf(" * * \n");printf(" * \n");printf("欢迎再次使用!!!\n\r\n");printf("*******************************************\n");printf("** . ..... . . ..... **\n");printf("** . . . . . . **\n");printf("** . . . . . ..... **\n");printf("** . . . . . . **\n");printf("** ..... ..... . ..... **\n");printf("*******************************************\n");4.人机交互界面:printf("\n——————————————————— \n");printf("——————请输入指令———————— \n");printf("————********************————— \n");printf("————$ 1.快速排序 $————— \n");printf("————$ 2.归并排序 $————— \n");printf("————$ 3.堆排序 $————— \n");printf("————$ 4.希尔排序 $————— \n");printf("————$ 5.插入排序 $————— \n");printf("————$ 6.选择排序 $————— \n");printf("————$ 7.冒泡排序 $————— \n");printf("————$ 8.重新随机输入 $————— \n");printf("————$ 9.选择排序方式 $————— \n");printf("————********************————— \n");printf("————— 0.退出—————— \n");printf("——————————————————— \n");printf("请选择:\n");printf("——————请输入指令———————— \n");printf("————********************————— \n");printf("————$ 1.从小到大 $————— \n");printf("————$ 0.从大到小 $————— \n");printf("————********************————— \n");printf("————— 87.退出—————— \n");printf("——————————————————— \n");printf("请选择:\n");5.排序方法的实现:(1)选择排序void chose_sort(int a[],int n){int min,temp;for(int i=0;i<n;i++){min=i;for(int j=i;j<n;j++)if(a[min]>a[j])min=j;temp=a[min];a[min]=a[i];a[i]=temp;}}(2)希尔排序void ShellInsert(int *a,int d,int n){for (int i=d;i<n;i++)//从第2个数据开始插入{int j=i-d;int temp=a[i];//记录要插入的数据while(j >= 0&&a[j]>temp)//从后向前,找到比其小的数的位置{a[j+d]=a[j];//向后挪动j-=d;}if(j!=i-d)//存在比其小的数a[j+d]=temp;}}void ShellSort(int* a,int n){int d=n/2;//初始增量设为数组长度的一半while(d>=1){ShellInsert(a,d,n);d=d/2;//每次增量变为上次的二分之一}}(3)归并排序:void __merge(int a[],int first,int mid,int last,int temp[]) {int i=first,j=mid+1,m=mid,n=last,k=0;while(i<=m&&j<=n){if(a[i]<=a[j])temp[k++]=a[i++];elsetemp[k++]=a[j++];}while(i<=m)temp[k++]=a[i++];while(j<=n)temp[k++]=a[j++];for(i=0;i<k;i++)a[first+i]=temp[i];}void MergeSort(int a[],int first,int last,int temp[]) {if(first<last){int mid=(first+last)/2;MergeSort(a,first,mid,temp);MergeSort(a,mid+1,last,temp);__merge(a,first,mid,last,temp);}}bool MergeSort(int a[],int n){int *p=new int[n];if(p==NULL)return false;else{MergeSort(a,0,n-1,p);delete[] p;return true;}}(4)堆排序:void HeapAdjust(int *a,int i,int size)//调整堆{int lchild=2*i;//i的左孩子节点序号int rchild=2*i+1;//i的右孩子节点序号int max=i;//临时变量if(i<=size/2)//如果i是叶节点就不用进行调整{if(lchild<=size&&a[lchild]>a[max])max=lchild;if(rchild<=size&&a[rchild]>a[max])max=rchild;if(max!=i){swap(a[i],a[max]);HeapAdjust(a,max,size);//避免调整之后以max为父节点的子树不是堆 }}}void BuildHeap(int *a,int size)//建立堆{int i;for(i=size/2;i>=1;i--)//非叶节点最大序号值为size/2HeapAdjust(a,i,size);}void HeapSort(int *a,int size)//堆排序{int j=1;BuildHeap(a,size);for(int i=size;i>=1;i--){swap(a[1],a[i]); //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面//BuildHeap(a,i-1); //将余下元素重新建立为大顶堆HeapAdjust(a,1,i-1); //重新调整堆顶节点成为大顶堆}}(5)冒泡排序:void maopao(){int temp;for(int i=1;i<=data_num;i++)for(int j=i+1;j<=data_num;j++)if(data_array[i]>data_array[j]){temp=data_array[i];data_array[i]=data_array[j];data_array[j]=temp;}}(6)插入排序:void charu(){int i,j;int temp;printf("插入排序:\n");for(i=1;i<=data_num;i++){int temp=data_array[i];for (j=i;j>0 && temp<data_array[j-1];j--){data_array[j]=data_array[j-1];}data_array[j]=temp;}if(!t)outnew0();elseoutnew1();}(7)快速排序:void kuaisu1()//快速排序1{printf("快速排序:\n");sort(data_array+1,data_array+data_num+1); if(!t)outnew0();elseoutnew1();}3.主要算法流程图4. 结果与结论4.1 正确结果1.主界面人机交互3.选择排序方式4.输出结果4.2错误信息5.算法复杂度以及稳定性分析下图反映了不同算法排序的时间复杂度的级别及其空间复杂度和稳定性。

相关文档
最新文档