实验4 查找排序的应用文档格式.docx

上传人:b****3 文档编号:16795106 上传时间:2022-11-26 格式:DOCX 页数:12 大小:131.29KB
下载 相关 举报
实验4 查找排序的应用文档格式.docx_第1页
第1页 / 共12页
实验4 查找排序的应用文档格式.docx_第2页
第2页 / 共12页
实验4 查找排序的应用文档格式.docx_第3页
第3页 / 共12页
实验4 查找排序的应用文档格式.docx_第4页
第4页 / 共12页
实验4 查找排序的应用文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验4 查找排序的应用文档格式.docx

《实验4 查找排序的应用文档格式.docx》由会员分享,可在线阅读,更多相关《实验4 查找排序的应用文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

实验4 查找排序的应用文档格式.docx

l、产生n个整数并存于数组r[1..n]中。

对主要查找算法(顺序查找、折半查找)和排序算法(直接插入排序、冒泡排序、快速排序、简单选择排序)进行实验比较,计算出平均比较次数、平均移动次数。

2、对实验结果数据进行对比分析。

1.#include<

iostream>

usingnamespacestd;

intcount;

intSepSearch(intr[],intkey,intlen)//顺序查找

{

inti;

count=0;

i=len;

while(key!

=r[i])

{

i--;

count++;

}

return(i);

intBinSrch(intr[],intkey,intlen)//折半查找

intlow,high,mid;

low=1;

high=len;

count=0;

while(low<

=high)

{count++;

mid=(low+high)/2;

if(key==r[mid])return(mid);

elseif(key<

r[mid])high=mid-1;

elselow=mid+1;

return(0);

voidBiInsertsort(intr[],intn)//插入排序(折半)

for(inti=2;

i<

=n;

i++)

{

if(r[i]<

r[i-1])

r[0]=r[i];

intlow=1,high=i-1;

while(low<

{

count++;

intmid=(low+high)/2;

if(r[0]<

r[mid])

high=mid-1;

elselow=mid+1;

}

intj;

for(j=i-1;

j>

high;

j--)

r[j+1]=r[j];

r[j+1]=r[0];

for(intk=1;

k<

k++)

printf("

%d"

r[k]);

printf("

\n"

);

voidBubbleSort(intr[],intn)//冒泡排序

inttemp,exchange,bound;

exchange=n;

while(exchange)//仅当上一趟排序有记录交换才进行本趟排序

bound=exchange;

exchange=0;

for(intj=1;

j<

bound;

j++)

if(r[j]>

r[j+1])

temp=r[j];

r[j]=r[j+1];

r[j+1]=temp;

exchange=j;

for(i=1;

i++)

r[i]);

intPartition(intr[],intfirst,intend)//快速排序一次划分

inti=first;

intj=end;

r[0]=r[first];

count=1;

while(i<

j)

j&

&

r[0]<

=r[j])j--;

//右侧扫描

r[i]=r[j];

r[i]<

=r[0])i++;

//左侧扫描

r[j]=r[i];

r[i]=r[0];

returni;

//i为轴值记录的最终位置

voidQuickSort(intr[],intfirst,intend)//快速排序

if(first<

end)

intpivot=Partition(r,first,end);

QuickSort(r,first,pivot-1);

//递归地对左侧子序列进行快速排序

QuickSort(r,pivot+1,end);

//递归地对右侧子序列进行快速排序

voidSelectSort(intr[],intn)//简单选择排序

inti,j,index,temp;

for(i=1;

i<

n;

i++)

index=i;

for(j=i+1;

j++)

count++;

if(r[j]<

r[index])index=j;

if(index!

=i)

temp=r[i];

r[i]=r[index];

r[index]=temp;

for(i=1;

voidmain()

constintnumv=12;

inta[3][numv]={{0,6,13,19,23,37,39,41,45,48,58,86},{0,86,58,48,45,41,39,37,23,19,13,6},{0,23,13,48,86,19,6,41,58,37,45,39}};

intz1[numv],z2[numv];

intm,n,i,j;

ints1;

请选择测试数据类:

1正序2逆序3随机[若跳出,请按4]\n"

scanf("

%d"

&

m);

while(m>

0&

m<

4)

请选择操作算法:

1直接插入排序2冒泡排序3快速排序4简单选择排序5顺序查找6折半查找\n"

n);

switch(n)

case1:

printf("

直接插入排序前:

for(j=1;

j<

numv;

j++)

a[m-1][j]);

直接插入排序结果为:

BiInsertsort(a[m-1],numv-1);

移动了"

"

次\n"

count);

break;

case2:

冒泡排序前:

for(j=1;

冒泡排序结果为:

BubbleSort(a[m-1],numv-1);

case3:

printf("

快速排序前:

快速排序结果为:

QuickSort(a[m-1],0,numv-1);

a[m-1][i]);

case4:

简单选择排序前:

简单选择排序结果为:

SelectSort(a[m-1],numv-1);

case5:

请输入查找的数:

%d\n"

s1);

i=SepSearch(a[m-1],s1,numv-1);

用顺序查找法查找数"

在第"

位,"

比较了"

s1,i+1,count);

case6:

j=BinSrch(a[m-1],s1,numv-1);

用折半查找法查找数"

default:

输入错误!

m=0;

请选择测试数据类型:

1正序2逆序3随机[若跳出,请按4]:

if(m==4)printf("

(*^__^*)再见!

elseprintf("

实验结果:

(1)直接插入排序:

(2)冒泡排序:

(3)快速排序:

(3)快速排序

(4)简单选择排序

(5)顺序查找

(6)折半查找

2.1顺

2结果分析

(1)几种排序法的比较如下表:

排序方法

平均情况

最好情况

最坏情况

辅助空间

直接插入排序

O(n2)

O(n)

O

(1)

起泡排序

O(n)

快速排序

O(nlog2n)

O(log2n)~O(n)

简单选择排序

(2)顺序查找

平均查找长度:

ASL=1/2(n+1)

(3)折半法平均查找长度:

ASL=(n+1)/2*log2(n+1)-1

折半法查找方法优点是比较次数少,查找速度快,平均性能好,但要求查找的表为有序,且插入删除困难。

实验体会

排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。

通过这次上机实验,增加了我学习算法的兴趣,虽然还不是很懂,但从中也发现程序设计的乐趣,在上机过程中犯的一些错误还会有意外的收获,感觉写算法还是很有意思的。

在具体操作中对这学期所学的数据结构和以前学的C语言的理论知识得到巩固,也发现自己的不足之处,在以后的上机中应更加注意,通过实际操作,学会数据结构书中程序的编写方法和基本步骤,,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1