查找和排序数据结构.docx

上传人:b****6 文档编号:2996886 上传时间:2022-11-17 格式:DOCX 页数:12 大小:59.78KB
下载 相关 举报
查找和排序数据结构.docx_第1页
第1页 / 共12页
查找和排序数据结构.docx_第2页
第2页 / 共12页
查找和排序数据结构.docx_第3页
第3页 / 共12页
查找和排序数据结构.docx_第4页
第4页 / 共12页
查找和排序数据结构.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

查找和排序数据结构.docx

《查找和排序数据结构.docx》由会员分享,可在线阅读,更多相关《查找和排序数据结构.docx(12页珍藏版)》请在冰豆网上搜索。

查找和排序数据结构.docx

查找和排序数据结构

数据结构实验报告

 

姓名:

学号:

班级:

计科1001

题目:

查找和排序

完成日期:

2012.6.8

成绩:

 

一,需求分析:

1:

程序分析

1)本程序主要完成了对一堆数字的查找和排序,其中查找只有一种方法,而排序有多种方法,主要是冒泡排序,快速插入排序,希尔排序,堆排序。

并且通过执行的次数可以判断其中的排序效率。

2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“菜单”,由用户根据自己的需求在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算提示以及信息输入显示在其后。

当你不想输入信息时,你可以按G结束该次操作,

2:

程序执行命令包括:

菜单

A:

冒泡排序

B:

折半查找

C:

直接排序

D:

希尔排序

E:

快速排序

F:

排序之前

G:

退出程序

3:

测试数据:

依次输入:

AFCFDFEFB

二概要设计:

1:

顺序存储结构的抽象数据类型定义为:

ADTList{

数据对象:

D={ai|ai∊ElemSet,i=1,2,...n,n>=0}

数据关系:

R1={|ai-1,aiD,i=1,2,...n}

基本操作:

maopao();

初始条件:

存在一个数据组,其顺序随意。

操作结果:

将所给的一组数据排序,并且输出其执行的次数。

insertsort()

初始条件:

存在一个数据组,其顺序随意。

操作结果:

将所给的一组数据排序,并且输出其执行的次数。

shellsort()

初始条件:

存在一个数据组,其顺序随意。

操作结果:

将所给的一组数据排序,并且输出其执行的次数。

qsort()

初始条件:

存在一个数据组,其顺序随意。

操作结果:

将所给的一组数据排序,并且输出其执行的次数。

output()

初始条件:

存在一个数据组,其顺序随意。

操作结果:

数超出排序前的顺序。

search_Bin()

初始条件:

存在一个数据组,其顺序随意。

操作结果:

折半查找某个特定元素。

}ADTSet

2.本程序包含二个大模块:

1)主程序模块:

voidmain(){

初始化;

do{

接受命令;

处理命令;

}while("命令"=“退出”);

}

2)输出模块

三,详细设计

#include

#include

#include

typedefstruct{

intkey;

intdata;

}SElemType;

typedefstruct{

SElemType*elem[21];

intlength;

}SSTable;

staticintsum=0;

//快速排序

intpartition(SSTable*L,intlow,inthigh)

{

intpivotkey;

L->elem[0]=L->elem[low];sum++;

pivotkey=L->elem[low]->data;

while(low

while((lowelem[high]->data>=pivotkey))

high--;

L->elem[low]=L->elem[high];sum++;

while((lowelem[low]->data<=pivotkey))

low++;

L->elem[high]=L->elem[low];

sum++;

}

L->elem[low]=L->elem[0];sum++;

returnlow;

}

voidqsort(SSTable*L,intlow,inthigh)

{

intpivotloc;

if(low

pivotloc=partition(L,low,high);

qsort(L,low,pivotloc-1);

qsort(L,pivotloc+1,high);

}

}

 

//希尔排序

voidshellinsert(SSTable*st,intdk)

{

inti,j;

for(i=dk+1;i<=st->length-1;++i)

if(st->elem[i]->dataelem[i-dk]->data)

{

st->elem[0]=st->elem[i];sum++;

for(j=i-dk;j>0&&st->elem[j]->data>st->elem[0]->data;j-=dk)

{st->elem[j+dk]=st->elem[j];sum++;}

st->elem[j+dk]=st->elem[0];sum++;

}

}

voidshellsort(SSTable*st,intdlta[],intt)

{

intk,j;

sum=0;

for(k=0;k

shellinsert(st,dlta[k]);

printf("希尔排序的结果是:

\n");

for(j=1;jlength;j++)

printf("%d",st->elem[j]->data);

printf("\n希尔排序的次数是:

%d\n",sum);

printf("\n");

}

//直接排序

voidinsertsort(SSTablest)

{

inti,j;

sum=0;

for(i=2;i<=st.length-1;++i)

if(st.elem[i]->datadata)

{

st.elem[0]=st.elem[i];sum++;

for(j=i-1;st.elem[j]->data>st.elem[0]->data;--j)

{st.elem[j+1]=st.elem[j];sum++;}

st.elem[j+1]=st.elem[0];sum++;

}

printf("直接排序的结果是:

\n");

for(j=1;j

printf("%d",st.elem[j]->data);

printf("\n直接排序的次数是:

%d\n",sum);

}

 

//折半查找

intsearch_Bin(SSTablest,intk)

{

intlow,high,mid;

low=1;high=st.length;

while(low<=high){

mid=(low+high)/2;

if(st.elem[mid]->key==k)returnmid;

if(st.elem[mid]->key>k)high=mid-1;

elselow=mid+1;

}

return0;

}

//冒泡排序

voidmaopao(SSTablest)

{

inti=0,j=0;

sum=0;

for(j=1;j

for(i=1;i

if(st.elem[i]->data>st.elem[i+1]->data)

{

inttemp;

temp=st.elem[i]->data;sum++;

st.elem[i]->data=st.elem[i+1]->data;sum++;

st.elem[i+1]->data=temp;sum++;

}

printf("冒泡排序的结果是:

\n");

for(j=1;j

printf("%d",st.elem[j]->data);

printf("\n冒泡排序的次数是:

%d\n",sum);

}

//输出函数

voidoutput(SSTablest)

{

intj;

printf("输出的结果是:

\n");

for(j=1;j

printf("%d",st.elem[j]->data);

printf("\n");

}

 

voidmain()

{

inti=0;

inttext[21]={0,11,4,55,72,38,64,87,22,9,97,99,10,15,49,86,48,19,56,14,59};

intT[3]={5,3,1};

charc;

SElemTypeS[21];

SSTableST;

SSTable*temp;

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

{//text.length()

S[i].key=i+1;

S[i].data=text[i];

ST.elem[i]=&S[i];

}

ST.length=21;

temp=&ST;

//text.length();

printf("菜单\n");

printf("A:

冒泡排序\n");

printf("B:

折半查找\n");

printf("C:

直接排序\n");

printf("D:

希尔排序\n");

printf("E:

快速排序\n");

printf("F:

排序之前\n");

printf("G:

退出程序\n");

do{

printf("请选择:

");

c=getchar();//scanf("%c",&c);

fflush(stdin);

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

{//text.length()

S[i].key=i+1;

S[i].data=text[i];

ST.elem[i]=&S[i];

}

temp=&ST;

switch(c)

{

case'A':

{

maopao(ST);

break;

}

case'B':

{

printf("折半查找的数据是:

%d\n",ST.elem[search_Bin(ST,ST.length)]->data);

break;

}

case'C':

{

insertsort(ST);

break;

}

case'D':

{

shellsort(temp,T,3);

break;

}

case'E':

{

intj;sum=0;

qsort(temp,1,ST.length-1);

printf("快速排序的结果是:

\n");

for(j=1;j

printf("%d",ST.elem[j]->data);

printf("\n快速排序的次数是:

%d\n",sum);

break;

}

case'F':

{

output(ST);

break;

}

}

}while(c!

='G');

}creatUDG(G)DFSTraverse(G)BFSTraverse(G)

}

函数的调用

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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