查找排序应用实验Word文档下载推荐.docx

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

查找排序应用实验Word文档下载推荐.docx

《查找排序应用实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《查找排序应用实验Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

查找排序应用实验Word文档下载推荐.docx

(特别要求:

使用菜单机制,在一个主程序下实现题目要求的排序和查找以及结果显示)

3实验步骤与源程序

#include<

stdio.h>

stdlib.h>

/*链式基数法排序声明*/

#defineRADIX10

#defineKEY_SIZE6

#defineLIST_SIZE20

#defineTRUE1

#defineFALSE0

typedefintKeyType;

typedefintOtherType;

typedefstruct

{

KeyTypekey[KEY_SIZE];

/*子关键字数组*/

OtherTypeother_data;

/*其它数据项*/

intnext;

/*静态链域*/

}RecordType1;

RecordType1r[LIST_SIZE+1];

/*r[0]为头结点*/

intlength;

intkeynum;

}SLinkList;

/*静态链表*/

typedefintPVector[RADIX];

typedefstruct

KeyTypekey;

}RecordType;

voidInsSort(RecordTyper[],intlength)

/*对记录数组r做直接插入排序,length为数组中待排序记录的数目*/

{

inti,j;

for(i=2;

i<

=length;

i++)

{

r[0]=r[i];

/*将待插入记录存放到监视哨r[0]中*/

j=i-1;

while(r[0].key<

r[j].key)/*寻找插入位置*/

{

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

j=j-1;

}

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

/*将待插入记录插入到已排序的序列中*/

}

}/*InsSort*/

//顺序查找

voidSeqSearch(RecordTyper[],intlength,KeyTypek)

inti;

r[0].key=k;

i=length;

while(r[i].key!

=k)i--;

printf("

该元素在数组中的位置是%d"

i);

}

//冒泡排序

voidBubbleSort(RecordTyper[],intlength)

/*对记录数组r做冒泡排序,length为数组的长度*/

intn,i,j;

intchange;

RecordTypex;

n=length;

change=TRUE;

for(i=1;

=n-1&

&

change;

++i)

change=FALSE;

for(j=1;

j<

=n-i;

++j)

if(r[j].key>

r[j+1].key)

{

x=r[j];

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

r[j+1]=x;

change=TRUE;

}

}/*BubbleSort*/

//快速排序

intQKPass(RecordTyper[],intleft,intright)

/*对记录数组r中的r[left]至r[right]部分进行一趟排序,并得到基准的位置,使得排序后的结果满足其之后(前)的记录的关键字均不小于(大于)于基准记录*/

intlow,high;

x=r[left];

/*选择基准记录*/

low=left;

high=right;

while(low<

high)

while(low<

high&

r[high].key>

=x.key)

/*high从右到左找小于x.key的记录*/

high--;

if(low<

high)

{

r[low]=r[high];

low++;

}

/*找到小于x.key的记录,则进行交换*/

high&

r[low].key<

x.key)/*low从左到右找大于x.key的记录*/

if(low<

r[high]=r[low];

}/*找到大于x.key的记录,则交换*/

r[low]=x;

/*将基准记录保存到low=high的位置*/

returnlow;

/*返回基准记录的位置*/

}/*QKPass*/

voidSelectSort(RecordTyper[],intlength)

/*对记录数组r做简单选择排序,length为数组的长度*/

inti,j,k,n;

for(i=1;

i<

=n-1;

++i)

k=i;

for(j=i+1;

j<

=n;

++j)

if(r[j].key<

r[k].key)k=j;

if(k!

=i)

{

x=r[i];

r[i]=r[k];

r[k]=x;

}

voidQKSort(RecordTyper[],intlow,inthigh)

/*对记录数组r[low..high]用快速排序算法进行排序*/

intpos;

if(low<

high)

pos=QKPass(r,low,high);

/*调用一趟快速排序,将枢轴元素为界划分两个子表*/

QKSort(r,low,pos-1);

/*对左部子表快速排序*/

QKSort(r,pos+1,high);

/*对右部子表快速排序*/

//堆排序

voidsift(RecordTyper[],intk,intm)

/*假设r[k..m]是以r[k]为根的完全二叉树,且分别以r[2k]和r[2k+1]为根的左、右子树为大根堆,调整r[k],使整个序列r[k..m]满足堆的性质*/

RecordTypet;

intx;

intfinished;

t=r[k];

/*暂存"

根"

记录r[k]*/

x=r[k].key;

i=k;

j=2*i;

finished=FALSE;

while(j<

=m&

!

finished)

if(j<

m&

r[j].key<

j=j+1;

/*若存在右子树,且右子树根的关键字大,则沿右分支"

筛选"

*/

if(x>

=r[j].key)

finished=TRUE;

/*筛选完毕*/

else

r[i]=r[j];

i=j;

j=2*i;

}/*继续筛选*/

r[i]=t;

/*r[k]填入到恰当的位置*/

}

voidcrt_heap(RecordTyper[],intlength)

/*对记录数组r建堆,length为数组的长度*/

inti,n;

n=length;

for(i=n/2;

i>

=1;

--i)/*自第[n/2]个记录开始进行筛选建堆*/

sift(r,i,n);

voidHeapSort(RecordTyper[],intlength)

/*对r[1..n]进行堆排序,执行本算法后,r中记录按关键字由大到小有序排列*/

RecordTypeb;

crt_heap(r,length);

n=length;

for(i=n;

i>

=2;

--i)

b=r[1];

/*将堆顶记录和堆中的最后一个记录互换*/

r[1]=r[i];

r[i]=b;

sift(r,1,i-1);

/*进行调整,使r[1..i-1]变成堆*/

}/*HeapSort*/

//链式基数排序

voidDistribute(RecordType1r[],inti,PVectorhead,PVectortail)

/*记录数组r中记录已按低位关键字key[i+1],…,key[d]进行过"

低位优先"

排序。

本算法按第i位关键字key[i]建立RADIX个队列,同一个队列中记录的key[i]相同。

head[j]和tail[j]分别指向各队列中第一个和最后一个记录(j=0,1,2,…,RADIX-1)。

head[j]=0表示相应队列为空队列*/

intj;

intp;

for(j=0;

=RADIX-1;

++j)

head[j]=0;

/*将RADIX个队列初始化为空队列*/

p=r[0].next;

/*p指向链表中的第一个记录*/

while(p!

=0)

j=r[p].key[i];

/*用记录中第i位关键字求相应队列号*/

if(head[j]==0)

head[j]=p;

/*将p所指向的结点加入第j个队列中*/

else

r[tail[j]].next=p;

tail[j]=p;

p=r[p].next;

}/*Distribute*/

voidCollect(RecordType1r[]

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

当前位置:首页 > 人文社科 > 法律资料

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

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