查找和排序数据结构文档格式.docx
- 文档编号:15907872
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:59.78KB
查找和排序数据结构文档格式.docx
《查找和排序数据结构文档格式.docx》由会员分享,可在线阅读,更多相关《查找和排序数据结构文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
直接排序
D:
希尔排序
E:
快速排序
F:
排序之前
G:
退出程序
3:
测试数据:
依次输入:
AFCFDFEFB
二概要设计:
顺序存储结构的抽象数据类型定义为:
ADTList{
数据对象:
D={ai|ai∊ElemSet,i=1,2,...n,n>
=0}
数据关系:
R1={<
ai-1,ai>
|ai-1,aiD,i=1,2,...n}
基本操作:
maopao();
初始条件:
存在一个数据组,其顺序随意。
操作结果:
将所给的一组数据排序,并且输出其执行的次数。
insertsort()
shellsort()
qsort()
output()
数超出排序前的顺序。
search_Bin()
折半查找某个特定元素。
}ADTSet
2.本程序包含二个大模块:
1)主程序模块:
voidmain(){
初始化;
do{
接受命令;
处理命令;
}while("
命令"
=“退出”);
}
2)输出模块
三,详细设计
#include<
stdio.h>
#include<
stdlib.h>
malloc.h>
typedefstruct{
intkey;
intdata;
}SElemType;
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<
high){
while((low<
high)&
&
(L->
elem[high]->
data>
=pivotkey))
high--;
elem[low]=L->
elem[high];
data<
low++;
elem[high]=L->
sum++;
}
elem[0];
returnlow;
voidqsort(SSTable*L,intlow,inthigh)
intpivotloc;
if(low<
high){
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]->
data<
st->
elem[i-dk]->
data)
{
st->
elem[0]=st->
elem[i];
for(j=i-dk;
j>
0&
elem[j]->
data>
elem[0]->
j-=dk)
{st->
elem[j+dk]=st->
elem[j];
elem[j+dk]=st->
voidshellsort(SSTable*st,intdlta[],intt)
intk,j;
sum=0;
for(k=0;
k<
t;
k++)
shellinsert(st,dlta[k]);
printf("
希尔排序的结果是:
\n"
);
for(j=1;
j<
st->
length;
j++)
%d"
st->
data);
\n希尔排序的次数是:
%d\n"
sum);
//直接排序
voidinsertsort(SSTablest)
for(i=2;
=st.length-1;
if(st.elem[i]->
st.elem[i-1]->
st.elem[0]=st.elem[i];
for(j=i-1;
st.elem[j]->
st.elem[0]->
--j)
{st.elem[j+1]=st.elem[j];
st.elem[j+1]=st.elem[0];
直接排序的结果是:
j<
st.length;
j++)
st.elem[j]->
\n直接排序的次数是:
//折半查找
intsearch_Bin(SSTablest,intk)
intlow,high,mid;
low=1;
high=st.length;
=high){
mid=(low+high)/2;
if(st.elem[mid]->
key==k)returnmid;
key>
k)high=mid-1;
elselow=mid+1;
return0;
//冒泡排序
voidmaopao(SSTablest)
inti=0,j=0;
for(i=1;
i<
st.length-j;
i++)
if(st.elem[i]->
st.elem[i+1]->
{
inttemp;
temp=st.elem[i]->
st.elem[i]->
data=st.elem[i+1]->
data=temp;
}
冒泡排序的结果是:
\n冒泡排序的次数是:
//输出函数
voidoutput(SSTablest)
intj;
输出的结果是:
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;
21;
{//text.length()
S[i].key=i+1;
S[i].data=text[i];
ST.elem[i]=&
S[i];
ST.length=21;
temp=&
ST;
//text.length();
菜单\n"
A:
冒泡排序\n"
B:
折半查找\n"
C:
直接排序\n"
D:
希尔排序\n"
E:
快速排序\n"
F:
排序之前\n"
G:
退出程序\n"
do{
请选择:
"
c=getchar();
//scanf("
%c"
&
c);
fflush(stdin);
switch(c)
{
case'
A'
:
maopao(ST);
break;
}
B'
折半查找的数据是:
ST.elem[search_Bin(ST,ST.length)]->
C'
insertsort(ST);
D'
shellsort(temp,T,3);
E'
qsort(temp,1,ST.length-1);
快速排序的结果是:
ST.length;
ST.elem[j]->
\n快速排序的次数是:
F'
output(ST);
}while(c!
='
G'
}creatUDG(G)DFSTraverse(G)BFSTraverse(G)
函数的调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 数据结构