排序算法的时间性能比较

合集下载

排序算法比较

排序算法比较

排序算法比较
排序算法的效率主要取决于算法的时间复杂度。

以下是常见的几种排序算法的时间复杂度和优缺点的对比:
1. 冒泡排序
冒泡排序的时间复杂度为O(n^2)。

优点是它的实现简单易懂,缺点是排序速度很慢,对大规模数据排序不太适用。

2. 插入排序
插入排序的时间复杂度也为 O(n^2)。

它的优点是适用于小数
据量的排序,缺点是对于大规模数据排序仍然效率不高。

3. 选择排序
选择排序的时间复杂度也为 O(n^2)。

它的优点是对于小数据
量的排序速度较快,但是因为其算法结构固定,所以其效率在大规模数据排序中表现不佳。

4. 快速排序
快速排序的时间复杂度为 O(nlogn)。

它是一种非常常用的排序算法,适用于大规模数据排序。

快速排序的优点在于分治的思想,可以充分发挥多线程并行计算的优势,缺点是在极端情况下(如输入的数据已经有序或者逆序)排序速度会较慢。

5. 堆排序
堆排序的时间复杂度为 O(nlogn)。

它的优点在于实现简单、稳定,可以用于实时系统中的排序。

缺点是在排序过程中需要使用一个堆结构来维护排序序列,需要额外的内存开销。

同时,由于堆的性质,堆排序不能发挥多线程并行计算的优势。

6. 归并排序
归并排序的时间复杂度为 O(nlogn)。

它的优点在于稳定、可靠,效率在大规模数据排序中表现良好。

归并排序在实现过程中需要使用递归调用,需要额外的内存开销。

同时,归并排序不适用于链式存储结构。

数据结构与算法分析实验报告

数据结构与算法分析实验报告

数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。

二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。

操作系统为 Windows 10。

三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。

通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。

2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。

体会到链表在动态内存管理和灵活操作方面的优势。

(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。

2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。

(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。

2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。

(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。

2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。

(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。

2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。

四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。

删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。

排序算法的比较及时间

排序算法的比较及时间

题目:排序算法比较设计目的:1.掌握各种排序的基本思想。

2.掌握各种排序方法的算法实现。

3.掌握各种排序方法的优劣分析及花费的时间的计算。

4.掌握各种排序方法所适应的不同场合。

二、设计内容和要求利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间。

函数说明cha_ru_sort(int nData[], unsigned int nNum) 插入排序maopao_sort(int maopao_data[],int maopao_n) 起泡排序select_sort(int *Data,int nLen) 选择排序QuickSort(int* pData,int nLen) 快速排序HeapSort(int array[],int length) 堆排序MergeSort(int sourceArr[], int targetArr[], int startIndex, int endIndex) 归并排序无参数返回**************************************************************/#include<stdio.h>#include<stdlib.h>//#include"stdlib.h"??//随机函数头文件#include<time.h>#define rand_number 30000 //产生随机数的个数int rand_numbers_30000_0[rand_number]={0},rand_numbers_30000_1[rand_number]={0}; int min,max; //随机数的范围//***************************************************************//功能:产生随机数//无参数返回void produce_rand_num(){int i;for(i=0;i<rand_number;i++){rand_numbers_30000_0[i]=min+rand()%max;}}/****************************************************************************** ***///函数名:插入排序////功能描述:插入排序从下到大,nData为要排序的数据,nNum为数据的个数,该排序是稳定的排序//一个数就是已经排列好的了,所以从数组第二个数开始进行插入排序////无参数返回/****************************************************************************** ***/void cha_ru_sort(int nData[], unsigned int nNum){unsigned int i,j,k;for( i = 1 ; i < nNum; i++){int nTemp = nData[i]; //从数组中的第二个数开始获取数据for( j = 0 ; j < i; j++)//对该数,寻找他要插入的位置{if(nData[j]>nTemp)//找到位置,然后插入该位置,之后的数据后移{for( k = i; k > j ;--k)//数据后移{nData[k]=nData[k-1];}nData[j]=nTemp;//将数据插入到指定位置break;}}}}/****************************************************************************** ***///函数名:冒泡排序////功能描述:/****************************************************************************** ***///冒泡排序,maopao_data要排序的数据,maopao_n数据的个数void maopao_sort(int maopao_data[],int maopao_n){unsigned char flag=0;//flag为1表示排序结束,初始化为0int i,j;int nTemp;//i从[0,maopao_n-1)开始冒泡,确定第i个元素for( i=0 ; i<maopao_n-1 ; i++)//比较maopao_n-1次{//从[maopao_n - 1, i)检查是否比上面一个小,把小的冒泡浮上去for(j=0;j<maopao_n- 1 -i ; j++){if( maopao_data[j] > maopao_data[j+1]) //如果下面的比上面小,交换{nTemp=maopao_data[j];maopao_data[j] = maopao_data[j+1];maopao_data[j+1]=nTemp;}}}}///****************************************************************************** ***///函数名:选择排序////功能描述:/****************************************************************************** ***///选择排序//选择排序,pnData要排序的数据,nLen数据的个数void select_sort(int *Data,int nLen){int nIndex,i,j,nTemp;//i从[0,nLen-1)开始选择,确定第i个元素for(i=0;i<nLen-1;i++){nIndex=i;//遍历剩余数据,选择出当前最小的数据for(j=i+1;j<nLen;j++){if(Data[j]<Data[nIndex]){nIndex=j;}}//如果当前最小数据索引不是i,也就是说排在i位置的数据不在nIndex处if(nIndex!=i){//交换数据,确定i位置的数据。

算法实验报告

算法实验报告

算法实验报告算法实验报告引言:算法是计算机科学的核心内容之一,它是解决问题的方法和步骤的描述。

算法的设计和分析是计算机科学与工程中的重要研究方向之一。

本实验旨在通过对算法的实际应用和实验验证,深入理解算法的性能和效果。

实验一:排序算法的比较在本实验中,我们将比较三种常见的排序算法:冒泡排序、插入排序和快速排序。

我们将通过对不同规模的随机数组进行排序,并记录每种算法所需的时间和比较次数,以评估它们的性能。

实验结果显示,快速排序是最快的排序算法,其时间复杂度为O(nlogn),比较次数也相对较少。

插入排序的时间复杂度为O(n^2),比较次数较多,但对于小规模的数组排序效果较好。

而冒泡排序的时间复杂度也为O(n^2),但比较次数更多,效率相对较低。

实验二:图的最短路径算法在图的最短路径问题中,我们将比较Dijkstra算法和Floyd-Warshall算法的效率和准确性。

我们将使用一个带权有向图,并计算从一个顶点到其他所有顶点的最短路径。

实验结果表明,Dijkstra算法适用于单源最短路径问题,其时间复杂度为O(V^2),其中V为顶点数。

而Floyd-Warshall算法适用于多源最短路径问题,其时间复杂度为O(V^3)。

两种算法在准确性上没有明显差异,但在处理大规模图时,Floyd-Warshall算法的效率较低。

实验三:动态规划算法动态规划是一种通过将问题分解成子问题并记录子问题的解来解决复杂问题的方法。

在本实验中,我们将比较两种动态规划算法:0-1背包问题和最长公共子序列问题。

实验结果显示,0-1背包问题的动态规划算法可以有效地找到最优解,其时间复杂度为O(nW),其中n为物品个数,W为背包容量。

最长公共子序列问题的动态规划算法可以找到两个序列的最长公共子序列,其时间复杂度为O(mn),其中m和n分别为两个序列的长度。

结论:通过本次实验,我们对不同算法的性能和效果有了更深入的了解。

排序算法中,快速排序是最快且效率最高的;在图的最短路径问题中,Dijkstra算法和Floyd-Warshall算法分别适用于不同的场景;动态规划算法可以解决复杂的问题,并找到最优解。

五种排序算法的性能分析

五种排序算法的性能分析
s to e e to o tpe f m s w e 1 W h n t e ue e i r e e or r s l c i n s r ror l. e he s q nc So d r d, i s r i o t o n e ton s r rbubb e s tp r o m s l or e f r
总 第 6期 21 0 0年 6月
重 庆航 天 职 业 技 术 学 院 学报
J u n lo o g i g Ae o p c l t c n c r a fCh n q n r s a e Po y e h i o
Ge e a n r 1NO 6 .
J n 2 1 u. 00
s lc ,i e t e e t ns r ,m e g ra u c r e nd q i k,t i e a p c o p e t a u m a ie hetm nd s a e c m l xiy w ss m rz d. Fu t r o e,t o c t - r he m r w a e
g re fO( )a d 0( l n) c l e d v de o is o n n n og ou d b i i d. On t e or e e e o a o ,po ii e a e e s he r c d s qu nc fr nd m stv nd r v r e, t pp ia i n r l s wa i e tba e hee e i nt .W he hesz e o dsi ma l ns r i hea lc to u e spo nt d ou s d on t xp rme s n t ieofr c r ss l,i e ton
Gan ' n V , Sh n i a a g Jn

几种排序的算法时间复杂度比较

几种排序的算法时间复杂度比较

几种排序的算法时间复杂度比较1.选择排序:不稳定,时间复杂度 O(n^2)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。

这样,经过i遍处理之后,前i个记录的位置已经是正确的了。

2.插入排序:稳定,时间复杂度 O(n^2)插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。

第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i] 又是排好序的序列。

要达到这个目的,我们可以用顺序比较的方法。

首先比较L[i]和L[i-1],如果L[i-1]≤ L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。

图1演示了对4个元素进行插入排序的过程,共需要(a),(b),(c)三次插入。

3.冒泡排序:稳定,时间复杂度 O(n^2)冒泡排序方法是最简单的排序方法。

这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。

在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。

所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。

如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。

显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。

在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。

一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。

4.堆排序:不稳定,时间复杂度 O(nlog n)堆排序是一种树形选择排序,在排序过程中,将A[n]看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。

各种排序算法的时间复杂度和空间复杂度(阿里)

各种排序算法的时间复杂度和空间复杂度(阿里)

各种排序算法的时间复杂度和空间复杂度(阿⾥)⼆分查找法的时间复杂度:O(logn) redis,kafka,B+树的底层都采⽤了⼆分查找法参考:⼆分查找法 redis的索引底层的跳表原理实现参考:⼆分查找法参考:⼆分查找法:1.⼆分查找⼆分查找也称为折半查找,它是⼀种效率较⾼的查找⽅法。

⼆分查找的使⽤前提是线性表已经按照⼤⼩排好了序。

这种⽅法充分利⽤了元素间的次序关系,采⽤分治策略。

基本原理是:⾸先在有序的线性表中找到中值,将要查找的⽬标与中值进⾏⽐较,如果⽬标⼩于中值,则在前半部分找,如果⽬标⼩于中值,则在后半部分找;假设在前半部分找,则再与前半部分的中值相⽐较,如果⼩于中值,则在中值的前半部分找,如果⼤于中值,则在后半部分找。

以此类推,直到找到⽬标为⽌。

假设我们要在 2,6,11,13,16,17,22,30中查找22,上图所⽰,则查找步骤为:⾸先找到中值:中值为13(下标:int middle = (0+7)/2),将22与13进⾏⽐较,发现22⽐13⼤,则在13的后半部分找;在后半部分 16,17,22,30中查找22,⾸先找到中值,中值为17(下标:int middle=(0+3)/2),将22与17进⾏⽐较,发现22⽐17⼤,则继续在17的后半部分查找;在17的后半部分 22,30查找22,⾸先找到中值,中值为22(下标:int middle=(0+1)/2),将22与22进⾏⽐较,查找到结果。

⼆分查找⼤⼤降低了⽐较次数,⼆分查找的时间复杂度为:O(logn),即。

⽰例代码:public class BinarySearch {public static void main(String[] args) {int arr[] = {2, 6, 11, 13, 16, 17, 22, 30};System.out.println("⾮递归结果,22的位置为:" + binarySearch(arr, 22));System.out.println("递归结果,22的位置为:" + binarySearch(arr, 22, 0, 7));}//⾮递归static int binarySearch(int[] arr, int res) {int low = 0;int high = arr.length-1;while(low <= high) {int middle = (low + high)/2;if(res == arr[middle]) {return middle;}else if(res <arr[middle]) {high = middle - 1;}else {low = middle + 1;}}return -1;}//递归static int binarySearch(int[] arr,int res,int low,int high){if(res < arr[low] || res > arr[high] || low > high){return -1;}int middle = (low+high)/2;if(res < arr[middle]){return binarySearch(arr, res, low, middle-1);}else if(res > arr[middle]){return binarySearch(arr, res, middle+1, high);}else {return middle;}}}其中冒泡排序加个标志,所以最好情况下是o(n)直接选择排序:排序过程:1 、⾸先在所有数据中经过 n-1次⽐较选出最⼩的数,把它与第 1个数据交换,2、然后在其余的数据内选出排序码最⼩的数,与第 2个数据交换...... 依次类推,直到所有数据排完为⽌。

排序算法比较

排序算法比较

排序算法比较在计算机科学中,排序算法是一类重要且基础的算法。

通过对数据进行排序,我们可以更高效地检索、查找以及分析数据。

在实际应用中,我们经常需要比较不同排序算法的性能和效率,以便选择最适合特定任务的排序算法。

本文将对几种常见的排序算法进行比较。

一、冒泡排序冒泡排序是一种简单但效率较低的排序算法。

其基本思想是通过多次交换相邻的元素,将最大(或最小)的元素逐渐“冒泡”到待排序序列的末尾。

具体实现过程如下:从头开始依次比较相邻的两个元素,如果顺序不正确,则进行交换。

重复此过程,直到没有任何交换发生。

冒泡排序的时间复杂度为O(n^2),其中n为待排序序列的长度。

这使得冒泡排序在大规模数据排序时表现较差。

二、插入排序插入排序是一种简单且高效的排序算法。

它的基本思想是将未排序部分的元素依次插入到已排序部分的正确位置,直到全部元素都有序。

具体实现过程如下:将未排序部分的第一个元素插入到已排序部分中的正确位置,然后再将第二个元素插入到已排序部分中,依此类推。

插入排序的时间复杂度为O(n^2),但在实际应用中,插入排序通常要比冒泡排序快得多。

插入排序对于小规模或基本有序的数据集合表现良好。

三、选择排序选择排序是一种简单但不稳定的排序算法。

其基本思想是从未排序部分选择最小(或最大)的元素,将其放到已排序部分的末尾。

具体实现过程如下:从未排序部分中选出最小的元素,将其与未排序部分的第一个元素交换位置,然后将已排序部分的长度加1。

重复此过程,直到全部元素都有序。

选择排序的时间复杂度为O(n^2),与冒泡排序和插入排序相同。

尽管选择排序的性能较差,但由于其实现简单,对于小规模数据集合仍然是一种可用的排序方法。

四、快速排序快速排序是一种高效的排序算法,常被用作标准库中的排序函数实现。

其基本思想是通过分治的策略将待排序序列划分为较小和较大的两个子序列,然后分别对子序列进行递归排序。

具体实现过程如下:选择一个基准元素,通过一趟排序将待排序序列分割为两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于等于基准元素。

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

排序算法的时间性能比较一、问题描述给出一组实验来比较下列排序算法的时间性能:快速排序、堆排序、冒泡排序二、基本要求(1)时间性能包括平均时间性能、最好情况下的时间性能、最差情况下的时间性能等。

(2)实验数据应具有说服力,包括:规模范围要大(如从100到10000),数据的初始特性类型要多,因而需要具有随机性;实验数据的组数要多,即同一规模的数组要多选几种不同类型的数据来实验。

实验结果要能以清晰的形式给出,如图、表等。

(3)算法所用时间必须是机器时间,也可以包括比较和交换元素的次数。

(4)实验分析及其结果要能以清晰的方式来描述,如数学公式或图表等。

(5)要给出实验的方案及其分析。

三、工具/准备工作Microsoft Visual C++ 6.0 软件。

四、分析与实现1.快速选择排序这个是冒泡排序的一种改进,他的基本思想就是在当前无序区R 【1….H】中任取一个数据元素的基准用此基准将当前无序区划分成左右二个较小的无序去区,R【1……i-1】和R【i+1…..H】,且左边的元素序子区中的数据元素均小于等于基数元素,右边的元素序子区中的数据元素均大于等于基数元素。

直到所有无序子区中的数据元素均已排序为止。

2.堆排序堆排序实质上就是具备有如下性质的完全二叉树:树中任一非子叶节点的关键字均大于等于其子孩子结点的关键字,它只要记录一个大小的辅助空间,每个待排序的记录只占有一个存储空间,一般记录数较小的。

但对基数较大的文件还是很有效的,因为运行时间主要是小号在建初始堆和调整建新堆时进行的反复的筛选上的。

3.冒泡排序这种排序的比较基本思想就是二二比较待排序的数据元素的大小,发现二个数据元素的次序相反时候,就进行交换,知道没有反序的数据为止。

冒泡排序是一种一次比较出最小或最大值,然后将其放置序列的最后一位置,再将剩下的从打一个位置开始到N-1的位置进行重复的操作。

排序算法的时间空间复杂度程序代码:#include<stdio.h>#include<stdlib.h>#include<math.h>#define MAXSIZE 50 typedef int KeyType;#define MAXNUM 100 typedef struct{KeyType Key;} RedType; RedType R[MAXNUM]; typedef struct{RedType r[MAXSIZE+1]; int length;}Sqlist;Sqlist L,L0,L1,L2,L3,L4,L5,L6,L7; typedef Sqlist HeadType;#define RADIX 10#define MAX 8#define MAX_SPACE 10000 typedef int KeysType; typedef struct {KeysType Keys [MAX];int next;}SLCell;typedef struct {SLCell rl[MAX_SPACE];int Keynum;int recnum;}SLList;typedef int ArrType[RADIX];int compare[8];int change[8];void shuRu(Sqlist L){int i=1,n;printf("请输入你输入的数据个数: \n"); scanf("%d",&n);printf("请依次的输入各个数据值\n"); L.length=n;for(;i<=L.length;i++){scanf ("%d",&L.r[i]);}}void shuChu(Sqlist L){int i=1;printf ("该顺序存储中的数据元素为:");for(;i<L.length;i++){printf("%d",L.r[i]);}printf("%d\n\n",L.r[i]);}//=======快速排序=========int partition (Sqlist L,int low ,int high){ KeyType pivotKey;L.r[0]=L.r[low];pivotKey=L.r[low].Key;change [4]++;while (low<high){compare[4]++;compare[4]++;while (low<high&&L.r[high].Key>=pivotKey) {--high;compare[4]++;}L.r[low]=L.r[high];change[4]++;compare[4]++;while (low<high&&L.r[low].Key<=pivotKey) {++low;compare [4]++;}L.r[high]=L.r[low];change[4]++;}L.r[low]=L.r[0];change [4]++;return low;}void Qsort (Sqlist L,int low,int high){ int pivotloc;if (low<high){ pivotloc =partition (L,low,high);Qsort (L,low,pivotloc-1);Qsort (L,pivotloc+1,high);}}void QuickSort (Sqlist L){Qsort(L,1,L.length);}//=========堆排序========void HeadAdjust(HeadType H,int s,int m){RedType rc;int j;rc=H.r[s];for(j=2*s;j<=m;j*=2){ compare[5]++;if(j<m&&(compare[5]++)&&(H.r[j].Key<H.r[j+1].Key))++j; if(rc.Key>H.r[j].Key){compare[5]++;break;}H.r[s]=H.r[j];s=j;change[5]++;}H.r[s]=rc;change[5]++;}void HeadSort (HeadType H){ RedType temp;for(int i = H.length/2 ; i>0; --i){ compare [5]++;HeadAdjust (H,i,H.length);}for(i=H.length;i>1;i--){compare [5]++;temp=H.r[1];H.r[1]=h.r[i];h.r[i]=temp; change[5]+=3HeadAjust (H,1,i-1);}}//=====冒泡法排序=====void bubbleSort (Sqlist &L){ int i,j,temp;for(i=1,i<=L.length;i++) {compare[2]++;compare[2]++;if(L.r[j].Key>L.[j+1].Key0;L.r[j=1].Key=temp;charge[2]+=3}}}}printf("\t请选择你要进行的操作\t\n");printf("\tcase 1:产生完全随机的数据再进行排序\t\n");printf("\tcase 2:自行输入一些数据再实现排序操作\t\n");printf("\tcase 0:退出程序\t\n");void Table{printf("t=算法名称=====比较次数====交换次数====== printf("\t1 快速排序t%d\t %d\t\n",COMPARE[H] change [5]);printf("t=算法名称=====比较次数====交换次数====== printf("\t1 堆排序t%d\t %d\t\n",COMPARE[H] change [3]);printf("t=算法名称=====比较次数====交换次数====== printf("\t1 冒泡排序t%d\t %d\t\n",COMPARE[H] change [0);void Random (sqlist &L){ SLList LK;for (int i=0;i<8;i++){compare[i]=0change[i]=0printf ("请输入你产生的随机数的数据个数:”)printf("排序之前的随机数的%d个数是:\n',L.length);for(i=1;i<=L.length:i++)printf ("%d",L.r[i].key);printf("\n下面执行的各个排序的运行情况、你“);void mian(){int choose;Men();printf("\t请选择:”);scanf (choose){case 1:Random (L);break:case 2:Yonghu (L);break:case 3:Nixh (L);break:case 0;return;}}}五、测试与结论输入数据得出结果如下:1当要求随机生成十二个数的结果如下:2.但随机生成34个数的结果如下:结论:从数据结果我们可以看出,当排序的数据个数少的时候,快速排序是最快的,而大的数据时,堆排序是比较好的选择。

每一个排序都有它自己的特点。

六、课程设计总结对于这次课程设计,我收获颇多,但发现自己有许多的不足,特别是代码的编写上,几乎参照了网上的资料,但从别人的程序中我学习到了很多在课堂上学不到的知识,这次的课程设计让我懂得了,只有努力学习,才的解决问题。

相关文档
最新文档