大数据结构课程设计

合集下载

数据结构最好的课程设计

数据结构最好的课程设计

数据结构最好的课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、栈、队列、树和图等。

2. 使学生了解不同数据结构的特点和适用场景,能正确选择合适的数据结构解决问题。

3. 让学生掌握常见数据结构的存储表示和操作方法,如顺序存储、链式存储等。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,如查找、排序等。

2. 提高学生编程实现数据结构及相关算法的能力,增强代码的可读性和可维护性。

3. 培养学生运用数据结构进行问题分析和设计解决方案的能力。

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

2. 培养学生合作学习、分享知识的团队精神,提高沟通与协作能力。

3. 使学生认识到数据结构在计算机科学中的重要性,增强对计算机科学的热爱和责任感。

课程性质:本课程为计算机科学与技术专业核心课程,旨在培养学生的数据结构知识和技能,提高解决实际问题的能力。

学生特点:学生具备一定的编程基础,对数据结构有一定了解,但尚需系统地学习和实践。

教学要求:结合课本内容,注重理论与实践相结合,强调动手实践和问题解决能力的培养。

通过案例分析和课堂讨论,引导学生掌握数据结构的核心知识,提高编程和问题解决能力。

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

二、教学内容1. 线性表:介绍线性表的定义、特点和基本操作,包括顺序存储和链式存储结构。

以具体案例讲解线性表的应用,如多项式的表示和操作。

2. 栈和队列:讲解栈和队列的基本概念、操作原理及其应用场景。

分析栈和队列在解决实际问题中的作用,如递归、函数调用栈等。

3. 树和二叉树:介绍树的基本概念、存储结构及遍历方法。

重点讲解二叉树的性质、遍历算法(前序、中序、后序)以及二叉搜索树的操作和应用。

4. 图:讲解图的定义、存储结构(邻接矩阵和邻接表)以及图的遍历算法(深度优先搜索和广度优先搜索)。

分析图在现实生活中的应用,如最短路径问题、拓扑排序等。

数据结构课课程设计

数据结构课课程设计

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

2. 学生能描述并分析不同数据结构在内存中的存储方式及其优缺点。

3. 学生掌握各类排序算法的原理、步骤及时间复杂度,能够根据实际问题选择合适的排序算法。

技能目标:1. 学生能够运用所学数据结构知识解决实际问题,具备编程实现线性表、树、图等数据结构的能力。

2. 学生能够熟练运用至少两种排序算法,并能够分析其性能。

3. 学生通过课程项目,培养团队协作和解决问题的能力。

情感态度价值观目标:1. 学生在学习过程中,培养对数据结构的兴趣和热情,形成积极向上的学习态度。

2. 学生通过探索和实践,培养勇于尝试、不断创新的科学精神。

3. 学生能够认识到数据结构在计算机科学中的重要地位,理解其在实际应用中的价值。

课程性质:本课程为计算机科学与技术专业基础课程,旨在帮助学生建立扎实的数据结构知识体系,提高编程能力和问题解决能力。

学生特点:学生为大学二年级,具备一定的编程基础和数学逻辑思维能力,对数据结构有一定了解,但尚未系统学习。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,强化编程实践,培养学生在实际项目中运用数据结构解决问题的能力。

在教学过程中,关注学生的学习反馈,及时调整教学策略,确保课程目标的达成。

二、教学内容1. 线性表:介绍线性表的概念、分类及基本运算,重点讲解顺序表和链表的实现原理及其操作,对应教材第2章。

- 顺序存储结构- 链式存储结构- 线性表的应用实例2. 栈与队列:讲解栈与队列的基本概念、存储结构及其操作,分析栈与队列在实际问题中的应用,对应教材第3章。

- 栈的顺序存储和链式存储- 队列的顺序存储和链式存储- 栈与队列的应用实例3. 树与二叉树:介绍树的基本概念、存储结构及其遍历方法,重点讲解二叉树的性质、存储结构、遍历算法及线索二叉树,对应教材第4章。

- 树的基本概念和存储结构- 二叉树的性质和存储结构- 二叉树的遍历算法- 线索二叉树4. 图:讲解图的基本概念、存储结构及其遍历算法,分析常见的图的应用场景,对应教材第5章。

数据结构课程设计(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. 掌握各类数据结构的存储表示方法,以及基本操作算法的实现。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够设计和实现小型算法程序。

2. 培养学生运用递归思想解决问题的能力,掌握递归算法的设计与实现。

3. 提高学生的编程实践能力,通过实验和项目练习,熟练运用所学数据结构进行程序设计。

情感态度价值观目标:1. 培养学生积极探究数据结构相关知识的学习兴趣,激发学生的学习热情和主动性。

2. 培养学生的团队协作精神,通过小组讨论和实践项目,提高沟通与协作能力。

3. 培养学生具备良好的程序设计素养,遵循编程规范,注重代码质量和性能优化。

课程性质:本课程为计算机专业核心课程,旨在使学生掌握数据结构的基本理论、方法和技能,为后续算法分析、软件工程等课程打下坚实基础。

学生特点:大学二年级学生,已具备一定的编程基础和算法知识,具备独立思考和学习的能力。

教学要求:结合课程特点和学生实际,注重理论与实践相结合,强调学生动手实践,培养学生解决实际问题的能力。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

通过本课程的学习,使学生能够具备扎实的理论基础和较强的实践能力,为未来从事计算机相关领域工作打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. 数据结构基本概念:介绍数据结构的基本概念、分类及其应用场景,分析不同数据结构的特点。

- 教材章节:第1章 数据结构绪论- 内容列举:线性结构、非线性结构、抽象数据类型等。

2. 线性表:讲解线性表的定义、存储表示(顺序存储、链式存储),以及基本操作(插入、删除、查找等)。

- 教材章节:第2章 线性表- 内容列举:顺序表、链表、栈、队列等。

大数据结构课程设计-纸牌游戏90639

大数据结构课程设计-纸牌游戏90639

仿造上面的创建链表时的循环条件没有添加等于号而出错了。

这也警示我在编写代码时要边写边思考,防止出现大的错误。

3.3运行程序
进入主界面后,用户可以根据窗口提示得到想要的结果。

即输入Y则运行该程序,得到所有正面朝上的牌的编号,输入Q则不运行该程序,退出运行窗口。

程序开始运行,进入界面,如图3所示。

图3程序开始界面
用户想要执行程序,选择Y,进入下一界面,如图4所示。

图4执行程序界面
用户不想要执行程序,选择Q,进入的界面,如图5所示。

图5不执行程序界面
4设计体会
阳大
阳大
阳大学。

大数据结构课程设计参考题目

大数据结构课程设计参考题目

数据结构课程设计题目数据结构课程设计题目(大题目).doc一、公司销售管理系统项目开发基本要求1.客户信息管理:对客户的基本信息进行添加、修改和删除。

2.产品信息管理:对产品的基本信息进行添加、修改和删除。

3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。

4.订单信息管理:对订单的基本信息进行添加、修改和删除。

二、高校科研管理系统系统主要用于帮助高校或科研单位管理和维护各项科研相关资料项目开发基本要求1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。

2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;围包括:分为全国、国际、地方三种情况;检索源包括:分为EI、SCI、核心和一般四种情况。

3.项目参加人员管理模块包括:显示添加修改删除查询。

4.项目基本情况模块包括:显示添加修改删除查询。

5.项目获奖情况模块包括:显示添加修改删除查询。

6.期刊论文管理模块包括:显示添加修改删除查询。

7.著作管理模块包括:显示添加修改删除查询。

8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。

9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。

三、网络五子棋对战四、不同排序算法模拟五、科学计算器数据结构课程设计题目1.运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=2 0)功能要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

数据结构课程设计(1)

数据结构课程设计(1)

数据结构课程设计(1)在当今的信息时代,数据结构已经成为计算机科学领域的基础和核心。

作为一名计算机专业的学生,了解和掌握数据结构的基本原理和应用是至关重要的。

本课程设计旨在通过实践项目,让学生深入理解数据结构的概念、算法及其在实际应用中的重要性。

1. 有序性:线性表中的元素按照一定的顺序排列。

2. 重复性:线性表中的元素可以重复出现。

线性表有多种实现方式,其中最常见的是顺序表和链表。

顺序表使用连续的内存空间来存储元素,而链表则使用节点和指针来表示元素之间的顺序关系。

1. 创建线性表:初始化一个空线性表。

2. 插入元素:在指定位置插入一个新元素。

3. 删除元素:删除指定位置的元素。

4. 查找元素:查找指定元素在线性表中的位置。

5. 显示线性表:输出线性表中的所有元素。

通过这个课程设计,学生将能够更好地理解线性表的基本概念和操作,并能够熟练地使用线性表解决实际问题。

同时,这也是为后续学习其他更复杂的数据结构打下基础的重要一步。

数据结构课程设计(1)在本课程设计中,我们将进一步探讨线性表在实际应用中的重要性。

线性表作为一种基础的数据结构,在许多领域中都有广泛的应用。

例如,在操作系统、数据库、网络编程等方面,线性表都发挥着重要的作用。

为了更好地理解线性表的应用,我们将通过一个实际案例来展示其价值。

假设我们正在开发一个在线购物系统,其中一个关键功能是管理用户的购物车。

购物车可以看作是一个线性表,其中每个元素代表一个商品。

1. 添加商品:用户可以选择将商品添加到购物车中,这相当于在线性表中插入一个新元素。

2. 删除商品:用户可以选择从购物车中删除某个商品,这相当于在线性表中删除一个元素。

3. 查找商品:用户可以搜索购物车中的某个商品,这相当于在线性表中查找一个元素。

4. 显示购物车:用户可以查看购物车中的所有商品,这相当于显示线性表中的所有元素。

通过这个实际案例,学生将能够更好地理解线性表在实际应用中的价值。

大数据结构课程设计实验报告材料.doc

大数据结构课程设计实验报告材料.doc

《数据结构》课程实验报告专业:指导老师:班级:姓名:学号:完成日期:一、实验目的1、掌握线性表的顺序存储结构和链式存储结构;2、熟练掌握顺序表和链表基本算法的实现;3、掌握利用线性表数据结构解决实际问题的方法和基本技巧;4、按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);5、按时提交实验报告。

二、实验环境计算机、C语言程序设计环境三、实验学时2学时,选做实验。

四、实验内容一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):①创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之内;②打印(遍历)该线性表(依次打印出表中元素值);③在线性表中查找第i个元素,并返回其值;④在线性表中第i个元素之前插入一已知元素;⑤在线性表中删除第i个元素;⑥求线性表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。

按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):①创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;②打印(遍历)该链表(依次打印出表中元素值);③在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;④在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;⑤在链表中按照有序方式插入一已知字符元素;⑥在线性表中删除第i个结点;⑦计算链表的长度。

五、实验内容一步骤:#include<stdio.h>#include<stdlib.h>#define MAX 20typedef int ElemType;typedef struct{ElemType elem[MAX];int last;}SeqList;void InitList(SeqList *L){L->last=-1;}void PrintList(SeqList *L){int i;printf("\n现在的数据为:");for(i=0;i<=L->last;i++)printf("%d ",L->elem[i]);}void CreatList(SeqList *L){ElemType e;int i=0;printf("\n输入数据(-1退出):");scanf("%d",&e);while(e!=-1){if(i<MAX){L->elem[i]=e;L->last=i;i++;}else{printf("\n表满!");}scanf("%d",&e);}}void Locate(SeqList *L, int i,ElemType e){i=0;while ((i<=L->last)&&(L->elem[i]!=e))i++;if (i<=L->last)printf("\n%d在顺序表中第%d个位置上。

  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. 收获与致 (18)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");}其中增加了输出空格与换行区别。

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");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.算法复杂度以及稳定性分析下图反映了不同算法排序的时间复杂度的级别及其空间复杂度和稳定性。

相关文档
最新文档