实验项目一 各种排序算法的性能测试

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

实验项目一各种排序算法的性能测试排序就是将一个记录的无序序列调整成为一个有序序列的过程。在对记录进行排序的时候,需要选定一个信息作为排序的依据,例如,可以按学生姓名对学生记录进行排序,这个特别选定的信息称为关键码。

排序的主要目的是为了进行快速查找,这就是为什么字典、电话薄和班级名册都是排好序的。

在数据结构课程中,我们已经学过了几种内部排序算法,没有一种排序算法在任何情况下都是最好的解决方案,有些排序算法比较简单,但速度相对比较慢;有些排序算法速度比较快,但却很复杂。

1.冒泡排序

通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就象水底下的气泡一样逐渐向上冒。

冒泡排序算法如下:

void bubblesort(int a[],int n)//冒泡排序C语言描述,待排序的元素放在数组a中

{

int i,j;

int temp;

for(i=0;i

{

for(j=n-1;j>i;j--)

{

if(a[j-1]>a[j])

{

temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

}

}

}

}

2.选择排序

假设待排序的列表的n个数据元素放在数组a中,第一次从n个数据元素中找出最小的元素与a[0]交换,第二次从剩下的n-1个元素中找出最小的元素与a[1]交换,……直到第n-1次在剩下的两个元素中找出最小的元素与a[n-1]交换,剩下的最后一个元素的位置就在a[n].

选择排序算法如下:

void selectsort(int a[],int n)//选择排序

{

int i,j;

int min,temp;

for(i=0;i

{

min=i;

for(j=i+1;j

{

if(a[j]

min=j;

}

temp=a[min];

a[min]=a[i];

a[i]=temp;

}

}

3.快速排序

任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。

void quicksort(int a[],int start,int end)//快速排序

{

int i,j,mid;

i=start;

j=end;

mid=a[i];

while(start>=end)return;

while(i

{

while(imid)j--;

if(i

while(i

if(i

}

a[i]=mid;

quicksort(a,start,i-1);//递归调用快速排序继续对前半部分的元素进行排序

quicksort(a,i+1,end);// 递归调用快速排序继续对后半部分的元素进行排序}

实验目的

1、学会使用算法时间效率的分析框架分别对以上三个排序算法进行算法分析;

2、验证算法运行时间函数随输入规模不断的增大的而增长,增长的次数是多少?

3、学会使用表格法和散点图记录实验数据并对数据进行分析。

实验内容:

一、算法分析框架

非递归算法分析的一般步骤:

1. 决定用哪个(或哪些)参数作为算法问题规模的度量

2. 找出算法中的基本语句

3. 检查基本语句的执行次数是否只依赖于问题规模

4. 建立基本语句执行次数的求和表达式

5. 用渐进符号表示这个求和表达式

分析递归算法时间效率的通用方案:

1.决定用哪个参数作为输入规模的度量。

2.找出算法的基本操作。

3.检查一下,对于相同规模的不同输入,基本操作的执行次数是否可能不同。如果有

这种可能,则必须对最差、最优和平均效率做单独的研究。

4.对于算法基本操作的执行次数,建立一个递推关系以及相应的初始条件。

5.解这个递推式,或者至少确定它的解的增长次数。

二、C语言如何产生随机数

1. 基本函数

rand()函数和srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件:

2. 使用方法

rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。

srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。

每次运行都将输出:1 7 4 0 9 4 8 8 2 4

相关文档
最新文档