链式简单选择排序 数据结构课程设计

合集下载

数据结构课程设计-排序

数据结构课程设计-排序

一、问题描述1、排序问题描述排序是计算机程序设计的一种重要操作,他的功能是将一组任意顺序数据元素(记录),根据某一个(或几个)关键字按一定的顺序重新排列成为有序的序列。

简单地说,就是将一组“无序”的记录序列调整为“有序”的记录序列的一种操作。

本次课程设计主要涉及几种常用的排序方法,分析了排序的实质,排序的应用,排序的分类,同时进行各排序方法的效率比较,包括比较次数和交换次数。

我们利用java语言来实现本排序综合系统,该系统包含了:插入排序、交换排序、选择排序、归并排序。

其中包括:(1)插入排序的有关算法:不带监视哨的直接插入排序的实现;(2)交换排序有关算法:冒泡排序、快速排序的实现;(3)选择排序的有关算法:直接选择排序、堆排序的实现;(4)归并排序的有关算法:2-路归并排序的实现。

2、界面设计模块问题描述设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。

界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。

二、问题分析本人设计的是交换排序,它的基本思想是两两比较带排序记录的关键字,若两个记录的次序相反则交换这两个记录,直到没有反序的记录为止。

应用交换排序基本思想的主要排序方法有冒泡排序和快速排序。

冒泡排序的基本思想是:将待排序的数组看作从上到下排列,把关键字值较小的记录看作“较轻的”,关键字值较大的纪录看作“较重的”,较小关键字值的记录好像水中的气泡一样,向上浮;较大关键字值的纪录如水中的石块向下沉,当所有的气泡都浮到了相应的位置,并且所有的石块都沉到了水中,排序就结束了。

冒泡排序的步骤:1)置初值i=1;2)在无序序列{r[0],r[1],…,r[n-i]}中,从头至尾依次比较相邻的两个记录r[j]与r[j+1](0<=j<=n-i-1),若r[j].key>r[j+1].key,则交换位置;3)i=i+1;4)重复步骤2)和3),直到步骤2)中未发生记录交换或i=n-1为止;要实现上述步骤,需要引入一个布尔变量flag,用来标记相邻记录是否发生交换。

选择排序法课程设计

选择排序法课程设计

选择排序法课程设计一、课程目标知识目标:1. 学生能理解选择排序法的概念,掌握其基本原理和步骤。

2. 学生能运用选择排序法对一组数据进行排序,并解释排序过程中各步骤的作用。

3. 学生了解选择排序法在计算机科学中的应用,认识到其与其他排序算法的优缺点。

技能目标:1. 学生能运用所学知识,独立编写选择排序法的程序代码。

2. 学生通过动手实践,提高逻辑思维和问题解决能力。

3. 学生能够分析并优化选择排序算法,提高编程实践能力。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣,激发学习编程的热情。

2. 学生在合作交流中,学会尊重他人意见,培养团队协作精神。

3. 学生通过学习选择排序法,认识到算法在实际生活中的重要作用,增强学以致用的意识。

课程性质:本课程为信息技术学科,以算法学习为主线,结合编程实践,培养学生逻辑思维和问题解决能力。

学生特点:学生处于初中阶段,对计算机编程有一定了解,具备基本操作能力,但编程实践经验不足。

教学要求:结合学生特点,课程设计应注重理论与实践相结合,注重培养学生的动手实践能力,提高学生的编程素养。

通过本课程的学习,使学生能够掌握选择排序法,并在实际问题中运用。

二、教学内容1. 选择排序法基本原理:介绍选择排序法的概念,阐述其工作原理及排序步骤。

- 教材章节:第三章第二节“选择排序法”2. 选择排序法的编程实现:- 引导学生了解选择排序法在编程中的具体应用,学习编写程序代码。

- 教材章节:第三章第三节“选择排序法的编程实现”3. 选择排序法实例分析:- 分析实际案例,让学生了解选择排序法在解决具体问题中的应用。

- 教材章节:第三章第四节“选择排序法实例分析”4. 选择排序法的优化:- 探讨如何优化选择排序算法,提高排序效率。

- 教材章节:第三章第五节“选择排序法的优化”5. 编程实践:- 布置相应的编程练习题,让学生动手实践,巩固所学知识。

- 教材章节:第三章第六节“编程实践”教学安排与进度:1. 第1课时:选择排序法基本原理及步骤。

链式简单选择排序

链式简单选择排序

题目: 链式简单选择排序初始条件:理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;实践:计算机技术系实验室提供计算机及软件开发环境。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)用户自己输入数据的个数和数据;(2)建立链表;(3)基于链表的排序算法实现。

2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、结果分析、设计体会等;(4)结束语;(5)参考文献。

时间安排:2007年7月2日-7日(第18周)7月2日查阅资料7月3日系统设计,数据结构设计,算法设计7月4日-5日编程并上机调试7月6日撰写报告7月7日验收程序,提交设计报告书。

指导教师签名: 2007年7月2日系主任(或责任教师)签名: 2007年7月2日链式简单选择排序摘要:单链表为存储结构,并在这个基础上实现简单选择排序。

一趟简单选择排序的操作为:通过n-1次关键字之间的比较,从n-i+1个记录中选出最小的记录并将这个记录并入一个新的链表中,在原链表中将这个结点删除。

关键字:单链表,简单选择排序,结点,记录0. 引言《数据结构》是计算机科学与技术、软件工程及相关学科的专业基础课,也是软件设计的技术基础。

《数据结构》课程的教学要求之一是训练学生进行复杂的程序设计的技能和培养良好程序设计的风格,其重要程度决不亚于理论知识的传授,因此课程设计环节是一个至关重要的环节,是训练学生从事工程科技的基本能力,是培养创新意识和创新能力的极为重要的环节。

基本要求如下:(1) 熟练掌握基本的数据结构;(2) 熟练掌握各种算法;(3) 运用高级语言编写质量高、风格好的应用程序。

因此在这个课程设计中我选择的是链式简单选择排序。

这个实验的实验要求是利用单链表作为记录(数据)的存储结构,并且在记录好用户输入了数据之后对这组数据进行输出,然后对其进行排序,并且输出排序好的数据。

数据结构课程设计报告---几种排序算法的演示(附源代码)

数据结构课程设计报告---几种排序算法的演示(附源代码)

&数据结构课程设计报告—几种排序算法的演示(;时间:2010-1-14…一需求分析运行环境Microsoft Visual Studio 2005程序所实现的功能对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况。

程序的输入(包含输入的数据格式和说明)%<1>排序种类三输入<2>排序数的个数的输入<3>所需排序的所有数的输入程序的输出(程序输出的形式)<1>主菜单的输出<2>每一趟排序的输出,即排序过程的输出"二设计说明算法设计思想<1>交换排序(冒泡排序、快速排序)交换排序的基本思想是:对排序表中的数据元素按关键字进行两两比较,如果发生逆序(即排列顺序与排序后的次序正好相反),则两者交换位置,直到所有数据元素都排好序为止。

<2>插入排序(直接插入排序、折半插入排序)%插入排序的基本思想是:每一次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。

开始时建立一个初始的有序序列,它只包含一个数据元素。

然后,从这个初始序列出发不断插入数据元素,直到最后一个数据元素插到有序序列后,整个排序工作就完成了。

<3>选择排序(简单选择排序、堆排序)选择排序的基本思想是:第一趟在有n个数据元素的排序表中选出关键字最小的数据元素,然后在剩下的n-1个数据元素中再选出关键字最小(整个数据表中次小)的数据元素,依次重复,每一趟(例如第i趟,i=1,…,n-1)总是在当前剩下的n-i+1个待排序数据元素中选出关键字最小的数据元素,作为有序数据元素序列的第i个数据元素。

等到第n-1趟选择结束,待排序数据元素仅剩下一个时就不用再选了,按选出的先后次序所得到的数据元素序列即为有序序列,排序即告完成。

<4>归并排序(两路归并排序)两路归并排序的基本思想是:假设初始排序表有n个数据元素,首先把它看成是长度为1的首尾相接的n个有序子表(以后称它们为归并项),先做两两归并,得n/2上取整个长度为2的归并项(如果n为奇数,则最后一个归并项的长度为1);再做两两归并,……,如此重复,最后得到一个长度为n的有序序列。

数据结构链表课程设计

数据结构链表课程设计

数据结构链表课程设计一、课程目标知识目标:1. 理解链表的基本概念,掌握链表的存储结构及其特点。

2. 学会使用链表实现数据的插入、删除和查找等基本操作。

3. 了解链表在实际应用场景中的优势,如解决动态数据存储问题。

技能目标:1. 能够编写链表的初始化、插入、删除和查找等操作的代码。

2. 能够运用所学知识解决实际问题,如设计一个简单的链表应用系统。

3. 能够分析链表操作的时间复杂度和空间复杂度。

情感态度价值观目标:1. 培养学生独立思考、解决问题的能力,增强自信心。

2. 培养学生团队协作精神,学会在讨论和交流中共同进步。

3. 激发学生对数据结构学习的兴趣,提高自主学习能力。

分析课程性质、学生特点和教学要求,我们将课程目标分解为以下具体学习成果:1. 掌握链表的基本概念,能够用文字和图形描述链表结构。

2. 熟练编写链表相关操作代码,能够实现简单的链表应用。

3. 了解链表的优势和局限性,能够结合实际场景选择合适的数据结构。

4. 培养良好的编程习惯,注重代码的规范性和可读性。

5. 通过小组合作,培养学生的沟通协作能力和团队精神。

6. 提高学生对数据结构在计算机科学中重要性的认识,激发学习兴趣。

二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 链表基本概念:介绍链表的定义、分类(单向链表、双向链表、循环链表等),以及链表在数据结构中的重要性。

2. 链表的存储结构:讲解链表节点的定义,以及链表的内存存储方式。

3. 链表基本操作:- 初始化:介绍如何创建一个空链表。

- 插入:讲解链表节点插入的原理和实现方法,包括头插法和尾插法。

- 删除:阐述链表节点删除的原理,以及如何实现删除指定节点。

- 查找:介绍如何在链表中查找指定元素,并实现相关功能。

4. 链表应用案例分析:分析实际应用场景,如多项式表示、约瑟夫问题等。

5. 链表性能分析:讨论链表操作的时间复杂度和空间复杂度。

教学内容安排和进度如下:1. 第1课时:链表基本概念、存储结构。

排序的数据结构课程设计

排序的数据结构课程设计

排序的数据结构课程设计一、教学目标本课程旨在让学生理解排序算法的原理和应用,掌握常见的排序算法,如冒泡排序、选择排序、插入排序等,培养学生分析问题、解决问题的能力,并提高学生的逻辑思维和编程实践能力。

1.理解排序算法的概念和作用;2.掌握冒泡排序、选择排序、插入排序等常见排序算法的原理和实现;3.了解排序算法的应用场景。

4.能够运用排序算法解决实际问题;5.能够编写程序实现常见的排序算法;6.能够分析排序算法的效率和适用条件。

情感态度价值观目标:1.培养学生对计算机科学和编程的兴趣和热情;2.培养学生勇于探索、积极思考的科学精神;3.培养学生团队协作、相互帮助的良好学习习惯。

二、教学内容本课程的教学内容主要包括排序算法的原理、实现和应用。

具体安排如下:第1课时:排序算法概述1.1 排序的概念和作用1.2 排序算法的分类和评价指标第2课时:冒泡排序2.1 冒泡排序的原理2.2 冒泡排序的实现2.3 冒泡排序的效率分析第3课时:选择排序3.1 选择排序的原理3.2 选择排序的实现3.3 选择排序的效率分析第4课时:插入排序4.1 插入排序的原理4.2 插入排序的实现4.3 插入排序的效率分析第5课时:排序算法的应用5.1 排序算法在实际问题中的应用5.2 排序算法的选择和优化三、教学方法本课程采用讲授法、讨论法和实验法相结合的教学方法。

1.讲授法:通过教师的讲解,让学生掌握排序算法的原理和实现;2.讨论法:通过小组讨论,让学生深入理解排序算法,提高解决问题的能力;3.实验法:通过编写程序,让学生动手实践,培养学生的编程能力和实际应用能力。

四、教学资源1.教材:《数据结构与算法》;2.参考书:《算法导论》、《排序与搜索》;3.多媒体资料:课件、教学视频;4.实验设备:计算机、编程环境。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面、客观、公正地评价学生的学习成果。

1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和理解能力,占总评的30%。

链式简单选择排序课程设计

链式简单选择排序课程设计

链式简单选择排序课程设计链式简单选择排序1 设计题目链式简单选择排序2 问题描述链式简单选择排序即以单链表为存储结构,实现简单选择排序的功能。

显然,实现该程序就是先要建立一个单链表,利用单链表对数据进行存储、操作。

将输入的整型数据以结点的形式存储在这个建立的单链表中。

然后对单链表中的这些结点的值进行简单选择排序。

该问题中,以带有附加头结点的单链表为存储结构,排序分为从大到小排序和从小到大排序两种方式,我们可以用这两种方法分别实现进行排序,分别得到结果。

3 设计3.1 存储结构设计 线性表的链式存储结构的特点是用一组任意的可以是不连续的存储单元存储线性表的数据元素。

它包括两个域:其中存储数据元素信息的称为数据域;存储直接后继存储位置的域称为指针域。

单链表结构体的定义如下:Struct link_node //链表节点类的定义{int data; //指针域link_node*next; //值域,不是float *next; 关于链表中的//指针指向问题link_node(link_node*ptr=NULL){next=ptr;};//初始化指针成员的构造函数link_node(const int &item,link_node*ptr=NULL)1{ //初始化指针成员和数据的构造函数data=item;next=ptr;};}; //结构体定义“;”结束其中,值域data 以整型存储了所要排序的关键字值,而指针域next 以指针型存储了指向下一个结点的地址。

其中两个构造函数分别用于初始化数据和指针成员。

Link_node 是定义的一个全局结构体变量,可以在下面的任何函数中调用。

3.2 主要算法设计本程序中主要用到5个函数,分别是构造函数list()、输入结点数据input(int )、输出数据函数output()、从小到大排列函数SelectSort1()、从大到小排列函数 voidSelectSort2()。

排序系统设计数据结构课程设计

排序系统设计数据结构课程设计

排序系统设计数据结构课程设计一、项目背景和目的排序系统是计算机科学中常见的一种算法,用于将一组数据按照特定的顺序进行罗列。

在数据结构课程设计中,我们需要设计一个排序系统,以实现对输入数据的排序功能。

本文将详细介绍排序系统的设计思路、数据结构的选择和实现方法。

二、设计思路1. 功能需求根据任务名称所描述的需求,我们的排序系统需要具备以下功能:- 支持多种排序算法,如冒泡排序、插入排序、选择排序、快速排序等。

- 能够处理不同类型的数据,如整数、浮点数、字符串等。

- 具备可扩展性,方便后续添加更多的排序算法。

2. 数据结构选择为了实现排序系统的功能,我们需要选择适合的数据结构来存储和操作数据。

常见的数据结构有数组、链表、栈、队列等。

在排序系统中,我们可以使用数组来存储待排序的数据。

3. 算法选择根据任务名称所描述的排序系统,我们需要选择多种排序算法来实现。

以下是几种常见的排序算法:- 冒泡排序:通过相邻元素的比较和交换,将较大的元素逐渐“冒泡”到数组末尾。

- 插入排序:将待排序的元素按照顺序插入到已排序的数组中。

- 选择排序:每次从待排序的数组中选择最小的元素,放到已排序的数组末尾。

- 快速排序:通过一趟排序将待排序的数组分割成独立的两部份,其中一部份的元素都比另一部份的元素小。

4. 系统设计基于以上的设计思路,我们可以将排序系统设计为以下几个模块:- 输入模块:用于接收用户输入的待排序数据。

- 排序算法模块:包含多种排序算法的实现。

- 输出模块:将排序结果输出给用户。

三、数据结构的实现在排序系统中,我们选择使用数组来存储待排序的数据。

数组具有随机访问的特性,方便进行元素的比较和交换。

以下是数组的实现代码示例:```pythonclass Array:def __init__(self, capacity):self.capacity = capacityself.data = [None] * capacityself.size = 0def append(self, value):if self.size == self.capacity:# 数组已满,需要扩容self.resize()self.data[self.size] = valueself.size += 1def resize(self):self.capacity *= 2new_data = [None] * self.capacityfor i in range(self.size):new_data[i] = self.data[i]self.data = new_datadef swap(self, i, j):self.data[i], self.data[j] = self.data[j], self.data[i]```四、排序算法的实现在排序系统中,我们需要实现多种排序算法。

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

课程设计题目链式简单选择排序学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2012 年 6 月22 日武汉理工大学《数据结构》课程设计说明书课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学系题目:链式简单选择排序初始条件:试写一个程序,以单链表作为存储结构,实现简单选择排序。

(1)待排序表的数据不得少于100项;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数。

(2)在课程设计报告中应对你的算法进行时间复杂度分析;(3)自行设计测试用例。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1. 问题描述简述题目要解决的问题是什么。

2. 设计存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;3. 调试报告调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。

4. 经验和体会(包括对算法改进的设想)5. 附源程序清单和运行结果。

源程序要加注释。

如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。

说明:1. 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。

2. 凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。

时间安排:1、6月15日~6月21日完成。

2、6月22日上午和下午在实验中心检查程序、交课程设计报告、源程序(U盘)。

指导教师签名: 2012年6月14日系主任(或责任教师)签名:年月日武汉理工大学《数据结构》课程设计说明书目录1、课程设计问题描述及问题分析1.1 课程设计问题描述1.2 问题分析2、课程设计要求3、课程设计开发平台4、程序设计4.1 存储结构设计4.2 主要算法设计4.2.1 链表的尾插法创建及数据的伪随机产生4.2.2 待排序数据的矩阵输出4.2.3 链式简单选择排序方法4.3 主函数算法设计5、程序调试过程6、运行结果及说明6.1创建程序主界面及链表6.2 从小到大排序及从大到小排序6.3比较五组不同输入数据的排序7、时间复杂度分析8、经验与体会9、参考文献10、附:课程设计源程序1、课程设计问题描述及问题分析1.1 课程设计问题描述试写一个程序,以单链表作为存储结构,实现对待排序表中的数据的简单选择排序,并输出排序结果1.2 问题分析由本次课程设计的课题内容分析可得,解决问题的实际就是要建立一个单链表,将待排序的整型数据以结点的形式存储在建立的单链表中。

然后,依次对单链表中的结点数据进行简单选择排序,其中排序分为从大到小排序和从小到大排序两种方式,分别用这两种方法实现所要求的排序得到结果。

2、课程设计要求(1)以单链表作为存储结构,实现简单选择排序。

待排序的数据不得少于100项,其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据进行比较;比较的指标为有关键字参加的比较次数。

(2)在课程设计报告中要对所设计的算法进行时间复杂度分析。

(3)设计完成后,自行设计测试用例,要有完整的调试过程和运行结果。

3、课程设计开发平台本课程设计需要采用支持标准C/C++的Visual C++编译器(6.0或更高版本),并采用最基础的Win32控制台程序。

4、程序设计本程序设计基本思想是:链式简单选择排序的是每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最大或最小的记录作为有序序列中第i个记录。

而本课程设计题目中要求以单链表为存储结构,待排序的数据由伪随机函数产生。

因此,首先需要创建一个单链表,将待排序数据存储在单链表中,然后用指针实现关键字的从大到小或者从小到大的排序。

4.1存储结构设计本课程设计要求使用线性表的链式存储结构来存储待排序的数据,而线性表的链式存储结构特点是用一组任意的可以是不连续的存储单元存储线性表的数据元素。

它包括两个域:存储数据元素信息的称为数据域,存储直接后继存储位置的域称为指针域。

单链表结构体的定义如下:typedef struct LNode{int key; //值域struct LNode *next; //指针域}Link;其中,值域key以整型存储了所要排序的关键字值,而指针域next以指针型存储了指向下一个结点的地址。

Link是定义的一个全局结构体变量,可以在下面的任何函数中调用。

4.2 主要算法设计本课程设计的程序中主要包括:创建链表函数Create_Link(Link *),打印链表函数Print_Link(Link *),以及核心部分简单选择排序从小到大排序函数SortFromMin(Link *)以及从大到小SortFromMax(Link *)。

4.2.1链表的尾插法创建及数据的伪随机产生在VC++中,有两个函数可以产生伪随机数,分别为rand(void)和srand(seed)。

rand()产生的随机整数是在0~RAND_MAX之间平均分布的,其用法是先调用srand 函数,如srand( (unsigned)time( NULL ) )。

这样可以使得每次产生的随机数序列不同。

如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。

要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。

以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。

也可以使用srand函数来人为指定种子数。

Link *Creat_Link( ){int in,count=0,n; //数据输入保存变量和计数器变量srand((unsigned)time(NULL));cout<<"请输入要产生的表长:";cin>>n;LNode *head,*p,*s; //head=new Link; //给头结点分配存储控间p=head; //p初始指向头结点,用来控制输入的循环cout<<"产生的数据为:";while(count<n){in=rand()%1000; //随机产生数if(count%10==0) cout<<endl;cout<<in<<" "; //随机产生的数的矩阵输出s=new Link; //在内存中分配任意的链表结构体空间s->key=in;p->next=s;p=s;count++;}cout<<"\n";p->next=NULL;head=head->next;return (head);}4.2.2待排序数据的矩阵输出本课程设计要求的待排序数据是用随机函数rand( )产生,并且,数据输出采用矩阵的形式表现。

以矩阵的形式输出所随机产生的数据实现代码如下:void Print_Link(Link * head) //循环输出链表的所有值域的数据{while(head){cout<<head->key;cout<<" ";head=head->next;}cout<<"\n";}4.2.3链式简单选择排序方法链式简单选择排序方法主要包括:从小到大排序的SortFromMin(Link *)和从大到小排序的SortFromMax(Link *)。

两个函数都包含了关键字参加的比较次数,共同构成了本程序的主体部分,其基本实现思想是一样的。

即,从链表的首结点起依次往下检索,选择在指定结点之后所有结点中最小(最大)的那个结点删除并插入到此结点后,循环到最后一个结点为止。

函数实现代码如下:Link *SortFromMin(Link *head) //简单选择,从小到大排序{LNode *h,*p,*q,*r,*s;int c=compCount;h=p=(LNode *)malloc(sizeof(LNode));p->next=head;while(p->next!=NULL) //p 控制循环比较的次数{r=p;q=p->next;while(q->next!=NULL) //求r 指向最小值前面一个结点{if(q->next->key < r->next->key){ r=q;c++;}q=q->next;}if(r!=p) //如果从小到大序列,r==p,不必排列{s=r->next; // s指向p后面剩下的最小的结点r->next=s->next;s->next=p->next;p->next=s;}p=p->next;}cout<<"关键字比较次数: "<<c<<endl;head=h->next;delete h;return head;}Link *SortFromMax(Link *head) //简单选择方法,实现从大到小排序,其实现代码同理见附表实验代码。

4.3主函数算法设计本程序的主函数通过定义一个链表结构体指针head,用以指向链表头结点;设计一个循环输入变量in(int),控制相关方法的调用来实现链表的建立及对数据的排序。

其中,变量in所指向调用的函数情况如下:While(1){If in=1,调用Create_Link(Link *),重新创建一个链表,;If in=2,调用SortFromMin(Link *),进行从小到大的排序,并打印结果; If in=3,调用SortFromMax(Link *),进行从大到小的排序,并打印结果; If in=0,break;}5、程序调试过程在本课程设计的程序调试过程中,出现错误提示如下:(1)--------------------Configuration: 345- Win32 Debug--------------------Compiling...链式简单选择排序.cppD:\Microsoft Visual Studio\Common\MSDev98\Bin\345.cpp(19) : error C2065: 'printf' : undeclared identifierError executing cl.exe.原因分析:缺少预处理命令“#include <stdio.h>”,不能将头文件“studio”中的内容加入到程序中,因而无法识别“printf”指令,这也是C 语言与C++语言的不同之处。

相关文档
最新文档