比较插入排序与合并排序的运行时间

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

HUST华中科技大学

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

姓名:XXXX

学号:XXXX

班级:XXXX

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

实验一比较插入排序与合并排序的运行时间

一、实验描述

随机生成n个数,分别用插入排序算法与合并排序算法进行排序,测试m次,计算两种算法的平均运行时间,并进行比较。

二、实验设计

算法一:插入排序

1.从第一个元素开始,该元素可以认为已经被排序

2.取出下一个元素,在已经排序的元素序列中从后向前扫描

3.如果该元素(已排序)大于新元素,将该元素移到下一位置

4.重复步骤3,直到找到已排序的元素小于或等于新元素的位置

5.将新元素插入到下一位置中

6.重复步骤2

算法二:合并排序

合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。合并排序也叫归并排序。

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

三、实验实现过程

1.定义clock_t变量start 和finish,用于记录函数执行前后的时间。

2.定义函数:

a) void Insert_Sort(int a[],int n)\\插入排序

b) void Merge_Sort(int a[],const int p,const int r)\\合并排序

3.输入m=1000,输入n(每次不同),重复计算1000次,输出结果。

4.在2过程执行前后分别加入代码:

start = clock();

finish = clock();

执行时间即为:

(double)(finish - start) / CLOCKS_PER_SEC;

5.得到数据,建立坐标图。

四、实验结果

插入排序:在输入规模较大时,算法耗时相对较长;适用于对少量元素进行排序。

合并排序:相比插入算法其耗时随着规模的增加增长的慢了许多,其优势要在数据规模较大时才能体现。

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

代码:

#include

#include

#include

#include

void Insert_Sort(int a[],int n)

{

int i,j,k;

for(j=1;j

{

k=a[j];

i=j-1;

while(k0)

{

a[i+1] = a[i];

i--;

}

a[i+1]=k;

}

}

//合并排序算法中的实现合并的子程序

void Merge(int a[],const int p,const int q,const int r)

{

int L_Length,R_Length;

int *L, *R, i, j, k;

L_Length = q - p + 1;

R_Length = r - q;

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

L = (int *)malloc(L_Length*sizeof(int));

R = (int *)malloc(R_Length*sizeof(int));

if(L == 0 || R== 0)

{

printf("内存分配失败!!!");

return;

}

for(i=0; i

{

L[i] = a[p+i];

}

for(j=0; j

{

R[j] = a[q+j+1];

}

i = 0;

j = 0;

for(k=p; k<=r; k++)

{

if((i

{

a[k] = L[i];

i++;

}

else

{

a[k] = R[j];

j++;

}

}

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

free(R);free(L);

}

//合并排序算法-主程序

//n*lg(n),系数较小

void Merge_Sort(int a[],const int p,const int r) {

int q;

if(p

{

q = (p+r)/2;

Merge_Sort(a,p,q);

Merge_Sort(a,q+1,r);

Merge(a,p,q,r);

}

}

void main()

{

double cost11,cost1=0,cost21,cost2=0;

clock_t start, finish;

int n,m,i;

int *string1, *string2;

printf("输入:要排序的数字个数,测试次数\n"); scanf ("%d,%d",&n,&m);

for(i=1;i<=m;i++)

{

srand( (unsigned)time( NULL ) );

string1 = (int *)malloc(n*sizeof(int));

string2 = (int *)malloc(n*sizeof(int));

for( i = 0; i < n;i++ )

XXXXXXXXXX 数据结构实验报告·实验一XXXXXXXXXXXX

相关文档
最新文档