数据结构之排序算法操作论文

合集下载

数据结构实验报告八-快速排序

数据结构实验报告八-快速排序

实验8 快速排序1.需求分析(1)输入的形式和输入值的范围:第一行是一个整数n,代表任务的件数。

接下来一行,有n个正整数,代表每件任务所用的时间。

中间用空格或者回车隔开。

不对非法输入做处理,及假设用户输入都是合法的。

(2)输出的形式:输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作系统要处理的任务所用的时间。

按此顺序进行,则使得所有任务等待时间最小。

(3)程序所能达到的功能:在操作系统中,当有n 件任务同时来临时,每件任务需要用时ni,输出所有任务等待的时间和最小的任务处理顺序。

(4)测试数据:输入请输入任务个数:9请输入任务用时:5 3 4 2 6 1 5 7 3输出任务执行的顺序:1 2 3 3 4 5 5 6 72.概要设计(1)抽象数据类型的定义:为实现上述程序的功能,应以整数存储用户的第一个输入。

并将随后输入的一组数据储存在整数数组中。

(2)算法的基本思想:如果将任务按完成时间从小到大排序,则在完成前一项任务时后面任务等待的时间总和最小,即得到最小的任务处理顺序。

采取对输入的任务时间进行快速排序的方法可以在相对较小的时间复杂度下得到从小到大的顺序序列。

3.详细设计(1)实现概要设计中定义的所有数据类型:第一次输入的正整数要求大于零,为了能够存储,采用int型定义变量。

接下来输入的一组整数,数据范围大于零,为了排序需要,采用线性结构存储,即int类型的数组。

(2)实现程序的具体步骤:一.程序主要采取快速排序的方法处理无序数列:1.在序列中根据随机数确定轴值,根据轴值将序列划分为比轴值小和比轴值大的两个子序列。

2.对每个子序列采取从左右两边向中间搜索的方式,不断将值与轴值比较,如果左边的值大于轴值而右边的小于轴值则将二者交换,直到左右交叉。

3.分别对处理完毕的两个子序列递归地采取1,2步的操作,直到子序列中只有一个元素。

二.程序各模块的伪代码:1、主函数int main(){int n;cout<<"请输入任务个数:";cin>>n;int a[n];cout<<"请输入任务用时:";for(int i=0;i<n;i++) cin>>a[i];qsort(a,0,n-1); //调用“快排函数”cout<<"任务执行的顺序:";for(int i=0;i<n;i++) cout<<a[i]<<" "; //输出排序结果}2、快速排序算法:void qsort(int a[],int i,int j){if(j<=i)return; //只有一个元素int pivotindex=findpivot(a,i,j); //调用“轴值寻找函数”确定轴值swap(a,pivotindex,j); //调用“交换函数”将轴值置末int k=partition(a,i-1,j,a[j]); //调用“分割函数”根据轴值分割序列swap(a,k,j);qsort(a,i,k-1); //递归调用,实现子序列的调序qsort(a,k+1,j);}3、轴值寻找算法://为了保证轴值的“随机性”,采用时间初始化种子。

数据结构排序实验报告

数据结构排序实验报告

数据结构排序实验报告数据结构排序实验报告引言:数据结构是计算机科学中的重要概念之一,它涉及到数据的组织、存储和操作方式。

排序是数据结构中的基本操作之一,它可以将一组无序的数据按照特定的规则进行排列,从而方便后续的查找和处理。

本实验旨在通过对不同排序算法的实验比较,探讨它们的性能差异和适用场景。

一、实验目的本实验的主要目的是通过实际操作,深入理解不同排序算法的原理和实现方式,并通过对比它们的性能差异,选取合适的排序算法用于不同场景中。

二、实验环境和工具实验环境:Windows 10 操作系统开发工具:Visual Studio 2019编程语言:C++三、实验过程1. 实验准备在开始实验之前,我们需要先准备一组待排序的数据。

为了保证实验的公正性,我们选择了一组包含10000个随机整数的数据集。

这些数据将被用于对比各种排序算法的性能。

2. 实验步骤我们选择了常见的五种排序算法进行实验比较,分别是冒泡排序、选择排序、插入排序、快速排序和归并排序。

- 冒泡排序:该算法通过不断比较相邻元素的大小,将较大的元素逐渐“冒泡”到数组的末尾。

实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。

- 选择排序:该算法通过不断选择数组中的最小元素,并将其放置在已排序部分的末尾。

实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。

- 插入排序:该算法将数组分为已排序和未排序两部分,然后逐个将未排序部分的元素插入到已排序部分的合适位置。

实现时,我们使用了循环和条件判断来找到插入位置,并通过移动元素的方式进行排序。

- 快速排序:该算法通过选取一个基准元素,将数组分为两个子数组,并对子数组进行递归排序。

实现时,我们使用了递归和分治的思想,将数组不断划分为更小的子数组进行排序。

- 归并排序:该算法通过将数组递归地划分为更小的子数组,并将子数组进行合并排序。

实现时,我们使用了递归和分治的思想,将数组不断划分为更小的子数组进行排序,然后再将子数组合并起来。

数据结构与算法实验报告5-查找与排序

数据结构与算法实验报告5-查找与排序

北京物资学院信息学院实验报告
课程名_数据结构与算法
实验名称查找与排序
实验日期年月日实验报告日期年月日姓名______ ___ 班级_____ ________ 学号___
一、实验目的
1.掌握线性表查找的方法;
2.了解树表查找思想;
3.掌握散列表查找的方法.
4.掌握插入排序、交换排序和选择排序的思想和方法;
二、实验内容
查找部分
1.实现顺序查找的两个算法(P307), 可以完成对顺序表的查找操作, 并根据查到和未查到两种情况输出结果;
2.实现对有序表的二分查找;
3.实现散列查找算法(链接法),应能够解决冲突;
排序部分
4.分别实现直接插入排序、直接选择排序、冒泡排序和快速排序算法
三、实验地点与环境
3.1 实验地点
3.2实验环境
(操作系统、C语言环境)
四、实验步骤
(描述实验步骤及中间的结果或现象。

在实验中做了什么事情, 怎么做的, 发生的现象和中间结果, 给出关键函数和主函数中的关键段落)
五、实验结果
六、总结
(说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)。

数据结构之的拓扑排序算法拓扑排序算法的实现和性能分析

数据结构之的拓扑排序算法拓扑排序算法的实现和性能分析

数据结构之的拓扑排序算法拓扑排序算法的实现和性能分析数据结构之拓扑排序算法拓扑排序算法的实现和性能分析拓扑排序是一种常用的图算法,用于对有向无环图(DAG)进行排序。

拓扑排序的主要应用包括任务调度、编译顺序、依赖关系管理等方面。

本文将介绍拓扑排序算法的实现及其性能分析。

一、拓扑排序算法的实现拓扑排序算法一般采用深度优先搜索(DFS)或广度优先搜索(BFS)来实现。

下面将以DFS实现为例进行介绍。

1. 创建图数据结构在进行拓扑排序之前,首先需要创建图的数据结构。

可以使用邻接表或邻接矩阵来表示图。

以邻接表为例,可以使用一个字典来表示每个节点和其相邻节点的关系。

2. 初始化标记数组为了保证每个节点只被访问一次,需要使用一个标记数组来记录节点的访问状态。

可以使用布尔数组或整数数组来表示,将未访问的节点标记为false或0,已访问的节点标记为true或1。

3. 实现拓扑排序函数拓扑排序函数的主要功能是对图进行遍历,并将节点按照拓扑排序的顺序输出。

拓扑排序函数通常使用递归的方式实现。

4. 输出排序结果拓扑排序算法完成后,可以将排序的结果输出。

按照拓扑排序的定义,输出的结果应该是一个拓扑有序的节点列表。

二、拓扑排序算法的性能分析拓扑排序算法的性能取决于图的规模和结构。

下面将从时间复杂度和空间复杂度两个方面进行性能分析。

1. 时间复杂度分析拓扑排序算法的时间复杂度主要取决于图的节点数和边数。

在最坏情况下,每个节点都需要遍历一次,而每个节点的边数是有限的,所以拓扑排序的时间复杂度为O(V+E),其中V表示节点数,E表示边数。

2. 空间复杂度分析拓扑排序算法的空间复杂度主要取决于存储图和标记数组的空间。

在使用邻接表表示图时,需要额外的空间来存储每个节点及其相邻节点的关系。

同时,需要使用标记数组来记录节点的访问状态。

所以拓扑排序的空间复杂度为O(V+E+V),即O(V+E),其中V表示节点数,E表示边数。

三、总结拓扑排序是一种常用的图算法,可以对有向无环图进行排序。

数据结构之各种排序的实现与效率分析

数据结构之各种排序的实现与效率分析

各种排序的实现与效率分析一、排序原理(1)直接插入排序基本原理:这是最简单的一种排序方法,它的基本操作是将一个记录插入到已排好的有序表中,从而得到一个新的、记录增1的有序表。

效率分析:该排序算法简洁,易于实现。

从空间来看,他只需要一个记录的辅助空间,即空间复杂度为O(1).从时间来看,排序的基本操作为:比较两个关键字的大小和移动记录。

当待排序列中记录按关键字非递减有序排列(即正序)时,所需进行关键字间的比较次数达最小值n-1,记录不需移动;反之,当待排序列中记录按关键字非递增有序排列(即逆序)时,总的比较次数达最大值(n+2)(n-1)/2,记录移动也达到最大值(n+4)(n-2)/2.由于待排记录是随机的,可取最大值与最小值的平均值,约为n²/4.则直接插入排序的时间复杂度为O(n²).由此可知,直接插入排序的元素个数n越小越好,源序列排序度越高越好(正序时时间复杂度可提高至O(n))。

插入排序算法对于大数组,这种算法非常慢。

但是对于小数组,它比其他算法快。

其他算法因为待的数组元素很少,反而使得效率降低。

插入排序还有一个优点就是排序稳定。

(2)折半插入排序基本原理:折半插入是在直接插入排序的基础上实现的,不同的是折半插入排序在将数据插入一个有序表时,采用效率更高的“折半查找”来确定插入位置。

效率分析:由上可知该排序所需存储空间和直接插入排序相同。

从时间上比较,折半插入排序仅减少了关键字间的比较次数,为O(nlogn)。

而记录的移动次数不变。

因此,折半查找排序的时间复杂度为O(nlogn)+O(n²)= O(n²)。

排序稳定。

(3)希尔排序基本原理:希尔排序也一种插入排序类的方法,由于直接插入排序序列越短越好,源序列的排序度越好效率越高。

Shell 根据这两点分析结果进行了改进,将待排记录序列以一定的增量间隔dk 分割成多个子序列,对每个子序列分别进行一趟直接插入排序, 然后逐步减小分组的步长dk,对于每一个步长dk 下的各个子序列进行同样方法的排序,直到步长为1 时再进行一次整体排序。

数据结构论文

数据结构论文

数据结构论文题目:数据结构院(部)名称:学生姓名:专业:指导教师姓名:论文提交时间:学位授予时间:论文题目:数据结构前言数据结构与算法这门课程中,基础性实验设计十分重要。

虽然有许许多多的关于数据结构与算法的书籍,但这些书籍基本上都是着重理论讲解,很少对课程中所涉及的实验进行单独的研究与开发。

而本论文通过单独及全面的强化课程的核心实验研究,进一步利用C语言进行编程和调试程序,能够利用C语言编写较复杂的程序,加深对教学内容的理解,验证所学的算法和数据结构,培养了设计数据结构的能力和根据数据结构设计算法的能力,掌握了非数值问题的数据结构和算法的设计方法,通过对具体问题的分析、设计和实现,培养了软件开发所需要的实践能力。

什么是数据结构;《数据结构》作为计算机专业的一门专业基础课,其主要内容包括将现实世界转化为在计算机世界中的抽象的数据描述,数据在计算机中的组织以及不同数据类型的基本操作实现等,是相对比较难于理解和掌握的课程。

它不仅要有计算机方面的高级语言、计算机基础和计算机组成原理等软硬件基础知识,还需要有一定的如离散数学等数学理论。

这门课程也是联系一般基础课和专业课的“桥梁”,它既是程序设计的入门课程,也是诸如操作系统、编译原理、计算机网络以及数据库原理等后续课程的重要的基础课程,它不仅是构筑这些课程体系与知识结构的核心课程之一,同时对奠定学生计算机专业的基础具有重要意义从多年对计算机专业的学生跟踪情况看,数据结构课程掌握的程度与学生对学习后续课程的积极性密切相关,甚至影响到对整个专业知识的掌握。

对毕业学生工作情况的跟踪调查看,工作中的程序设计能力也需要有数据结构的相关知识。

一般来说,具有较好数据结构基础知识的学生,在工作过程中适应工作变动、开辟新的研究阵地的能力较强。

从而能较好地紧跟信息技术的高速发展。

在计算机当中数据结构是计算机的基础但是也是很重要的一门专业课,学好并了解其中的知识对今后的社会和经济发展起到很好的促进作用。

《数据结构》上机实验报告—常用排序算法的实现

《数据结构》上机实验报告—常用排序算法的实现
return OK;
}
int InsertSort(Form &F)
{//对顺序表F作直接插入排序
int i,j;
int comp=0;//比较次数
int move=0;//移动次数
for(i=2;i<=F.length;i++)
{
comp++;
if(F.r[i].key<F.r[i-1].key)
{
high--;
move++;
}
F.r[low]=F.r[high];
if(low<high&&F.r[low].key<=p)
{
low++;
move++;
}
F.r[high]=F.r[low];
}
F.r[low]=F.r[0];
return low;
}
void main()
{
Form F;
Init_Form(F);
{
F.r[0]=F.r[i]; //F.r[0]是监视哨
F.r[i]=F.r[i-1];
j=i-2;
comp++;
if(F.r[0].key<F.r[j].key)
{//进行元素移动,以腾出位置插入F.r[i]
F.r[j+1]=F.r[j];// 记录后移
j--;
move++;
}
F.r[j+1]=F.r[0]; //在j+1处插入F.r[i]
2.实现快速排序算法。
3.实现折半插入排序。
4.采用几组不同数据测试各个排序算法的性能(比较次数和移动次数)。

数据结构与算法论文

数据结构与算法论文
其次是冲突处理;由于散列函数很可能将不同的关键字计算出相同的散列地址,所以就需要为发生冲突的关键字结点找到一个“空”的散列地址。冲突处理的方法有1、开放定址法:Hi=(H(key)+di) mod m,i=1,2,3,…,K(K≤m-1) 例如(1)、线性探测再散列,取di=1,2,3,…,m-1 (2)、二次探测再散列,取di=1(2),-1(2),2(2),-2(2),… (3)、伪随机探测再散列,取di=伪随机数;2、链地址法:在散列表的每一个存储单元中增加一个指针域,把产生冲突的关键字以链表结构存放在指针指向的单元中。
课 程 学 习 总 结
班级
学号
姓名
考核成绩
一、学习内容总结(按章节进行)
第一章:数据结构和算法
本章主要是对数据、数据类型、数据结构、算法及算法分析等基本概念的掌握,而如何合理地组织数据、高效地处理数据正是扩大计算机领域、提高软件效率的关键,所以对这些概念的理解就显得十分重要。
数据是指描述客观事物的数值、字符、相关符号等所有能够输入到计算机中并能被计算机程序处理的符号的总称,其基本单位是数据元素,而数据类型是一个同类值的集合和定义在这个值集上的一组操作的总称。在高级程序语言中定义一种数据类型时,编译程序编译系统就能获得如下信息:(1)、一组性质相同的值的集合;(2)、一个预订的存储体系;(3)、定义在这个值集合上的一组集合。数据结构是指数据元素之间的关系,它包括数据的逻辑结构、存储结构、一组运算集合;数据的逻辑结构(即数据结构)分为线性结构和非线性结构,数据的存储方法有:顺序存储方法、连接存储方法、索引存储方法和散列存储方法。接下来便是关于算法的有关概念,算法是为解决一个特定问题而采取的确定的有限步骤集合,它具有有穷性、确定性、可行性、输入和输出。关于算法的性能分析,分为时间性能分析和空间性能分析,在这里要记得常见的时间复杂度的比较:O(1)< O(log n)< O(n)< O(nlog n)<(n )< O(n )< O(n )< O(2 )。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

排序算法操作课程名称:数据结构研究论文题目:排序算法操作院系:学生姓名:学号:专业班级:年月日数据结构之排序算法操作摘要:本文通过对数据结构中排序算法深入研究,实现了排序算法中的直接插入排序、快速排序和简单选择排序操作,进一步加深了对数据结构中排序算法的理解,得到的算法可以应用到以后的编程实践中。

关键词:排序时间复杂度空间复杂度稳定性1.引言排序是日常生活和工作中的一个常见问题,其目的是将一组原本无序的数据元素(或记录)序列,按照人们所需要的顺序,排列成有规律的按关键字有序的序列。

在现实生活中,人们要用到排序。

如:学生成绩往往需要按照成绩高低或按学号从前到后排序;在图书馆众多的图书中,需要按照各个学科将书籍归类;排队时从高到低的顺序排队等问题。

同样,排序也是计算机程序设计中的一个非常重要的操作,在计算机软件设计中占有极其重要的地位。

本文将对排序算法中直接插入排序、快速排序和简单选择排序三种算法的实现做一些研究。

2.算法的实现直接插入排序算法中,第i趟进行的操作为:在含有i-1个记录的有序子序列r[1…i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列r[1….i];并且为了在查找插入位置的过程中避免数组下标出界,在r[0]处设置监视哨,在自i-1起往前搜索的过程中,可以同时后移记录。

算法1 直接插入排序算法Step1:从第二个记录起逐个进行关键字与前面关键字的比较并判断是否把该记录作为哨兵for ( i=2; i<=L.length; ++i )if(LT(L.r[i].key, L.r[i-1].key))L.r[0] = L.r[i]; //若“<”,将L.r[i]复制为哨兵Step2:在进行关键字比较的同时后移记录for ( j=i-1; LT( L.r[0].key, L.r[j].key ); --j )L.r[j+1] = L.r[j]; //记录后移Step3:把记录插入到正确的位置L.r[j+1] = L.r[0]; //插入到正确位置快速排序算法中,一趟快速排序的具体作法为:附设两个指针low和high,他们的初值分别为low和high,设枢轴的关键字为pivokey,则首先从high所指位置起向前搜索找到第一个关键字小于pivokey的记录和枢轴记录相互交换,然后从low所指位置起向后搜索,找到第一个关键字大于的pivokey记录和枢轴记录相互交换,重复这两步直至low=high为止。

算法2.1一趟快速排序算法Step1:选取一个记录作为枢轴,并把关键字附给pivokeyL.r[0] = L.r[low]; //用子表的第一个记录作枢轴记录pivotkey = L.r[low].key; //枢轴记录的关键字Step2:从high所指位置起向前搜索找到第一个关键字小于pivokey的记录和枢轴记录相互交换,同时把比枢轴小的记录移到低端while (low<high && L.r[high].key>=pivotkey) --high;L.r[low] = L.r[high]; //将比枢轴记录小的记录移到低端Step3:从low所指位置起向前搜索找到第一个关键字大于pivokey的记录和枢轴记录相互交换,同时把比枢轴小的记录移到高端while (low<high && L.r[low].key<=pivotkey) ++low;L.r[high] = L.r[low] //将比枢轴记录大的记录移到高端Step4: 当low=high时,把枢轴记录移到位,并且返回枢轴位置L.r[low] = L.r[0] //枢轴记录到位return low //返回枢轴位置算法2.2递归快速排序算法Step1:通过调用QSort函数把整个顺序表一分为二QSort( L, 1, L.length );Step2:把子表再一分为二,然后分别对低子表和高子表进行划分pivotloc = Partition( L, low, high );//将L.r[low...high]一分为二QSort( L, low, pivotloc-1 ); //对低子表递归排序QSort( L, pivotloc+1, high ); //对高子表递归排序简单选择排序中,第i趟进行的操作为:从第i+1个记录到第n个记录中选一个关键字最小的记录,然后与第i个记录进行交换。

算法3 简单选择排序算法Step1:从个i+1记录开始从中选一个关键字最小的记录for ( i=1; i<L.length; ++i ) { // i 为选择区间下界j = i; // j 指向当前的初始记录for ( k=i+1; k<=L.length; ++k )if ( L.r[k].key<L.r[j].key )j = k; //让j指向当前最小的记录Step2:将找到的最小的记录与第i个记录交换if ( i != j )L.r[i] L.r[j]; //与第个i记录交换3. 算法分析3.1直接插入排序从时间复杂度方面来看:当初始记录的关键字序列按非递减有序时,所需进行的关键字间的比较次数达到最小值n-1,记录不需移动;反之当初始记录的关键字序列按非递增有序时,总的比较次数达到最大值(n+2)(n-1)/2,记录移动的次数也达到最大值(n+4)(n-1)/2。

而初始记录是随机的,则取上述最大值和最小值的平均值作为直接插入排序的时所需进行关键字间的比较次数和移动记录的次数,约为n2/4。

3.2 快速排序从时间复杂度方面来看:最好的情况是每次划分得到的两个子序列的长度大致相等,在这种情况下排序过程所需要的比较次数为O(n·log2n),最坏的情况是,每次划分得到的子序列有一个为空,而另一个长度为n-1,此时需要进行n-1趟快速排序,整个过程的比较次数为:n(n-1)/2。

3.3简单选择排序从时间复杂度方面来看:在一趟排序中关键字的比较次数为n-1次,在第二趟排序中关键字的比较次数为n-2次,………第i趟排序中关键字的比较次数为n-i次,总的比较次数为n(n-1)/2。

而在各次排序中,记录的移动次数最好的情况是该记录正好处于合适的位置上,不需要移动,此时移动次数为0次,最坏的情况需要交换记录的位置,此时的移动次数为3次,所以总的移动次数最好为0次,最坏为3(n-1)次,由此可知,简单选择排序的时间复杂度为O(n2)。

从空间复杂度方面来看:简单选择排序在交换记录时需要一个记录大小的缓存空间,所以其空间复杂度为O(1)。

4.应用举例假设待排序的记录的关键字序列为:49,38,65,97,76,13,27,49’,排序以后的记录按关键字非递减有序4.1直接插入排序的基本思想:每次将待排序的一个记录按其关键字大小插入到已经排好序的子序列中,直到所有的记录都插入完为止。

直接插入排序的过程如图2.1所示:[初始关键字] (49) 38 65 97 76 13 27 49’i=2: (38) (38 49) 65 97 76 13 27 49’i=3: (38) (38 49 65) 97 76 13 27 49’i=4: (38) (38 49 65 97) 76 13 27 49’i=5: (76) (38 49 65 76 97) 13 27 49’i=6: (13) (13 38 49 65 76 97) 27 49’i=7: (27) (13 27 38 49 65 76 97) 49’i=8: (49’) (13 27 38 49 49’ 65 76 97)监视哨L.r[0]图2.14.2 快速排序的基本思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分的记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序以达到整个序列有序。

整个排序过程采用递归方式,一趟快速排序过程如图2.2(a)图所示:pivotkey初始关键字 49 38 65 97 76 13 27 49’i j j进行1次移动后 27 38 65 97 76 13 49’i i j进行2次移动后 27 38 97 76 13 65 49’i j j进行3次移动后 27 38 13 97 76 65 49’i i j进行4次移动后 27 38 13 76 97 65 49’i j j完成一趟排序 27 38 13 49 76 97 65 49’图 2.2(a)排序的全过程如图2.2(b)所示:初始状态 {49 38 65 97 76 13 27 49’}一次划分之后 {27 38 13} 49 {76 97 65 49’}分别进行快速排序{13} 27 {38}结束结束 {49’ 65} 76 {97}49’ {65} 结束结束有序序列 {13 27 38 49 49’ 65 76 97}图 2.2(b)4.3简单选择排序的基本思想:每一趟在n-i+1(i=1,2,……,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录,并和第i(0<i<n+1)个记录交换。

简单选择排序的过程如图2.3所示:49 38 65 97 76 13 27 49’第1趟 13 38 65 97 76 49 27 49’第2趟13 27 65 97 76 49 38 49’第3趟13 27 38 97 76 49 65 49’第4趟13 27 38 49 76 97 65 49’第5趟13 27 38 49 49’97 65 76 第6趟13 27 38 49 49’65 97 76 第7趟13 27 38 49 49’65 76 97图2.35. 结束语本文中讨论的排序的初始序列都是建立在静态顺序存储结构基础上的,所以排序过程中产生了大量的记录移动,从而导致系统空间开销很大,时间耗费也很大。

因此,可以采用静态链表或动态链表作存储结构,以提高整个排序算法的效率。

可以把本文中快速排序中用到的递归算法改为非递归形式,降低排序算法的空间复杂度。

参考文献:[1] 严蔚敏,吴伟明. 数据结构(C语言版), 清华大学出版社,1997.[2] 谭浩强. C程序设计,清华大学出版社,2000.。

相关文档
最新文档