数据结构课程设计查找排序_数据结构课程设计排序

2020-02-28 其他范文 下载本文

数据结构课程设计查找排序由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构课程设计排序”。

查找及排序算法实现

一、实验目的1、熟练掌握二叉排序树查找算法及C语言描述。

2、熟练掌握折半查找算法及C语言描述。

3、熟练掌握简单选择排序算法及C语言描述。

4、熟练掌握简单插入排序算法及C语言描述。

5、熟练掌握冒泡(起泡)排序算法及C语言描述。

6、了解各种查找及排序算法的优缺点、实用性及应用。

7、将理论与实际相结合,切实提高自己的逻辑能力和动手能力。

二、设计内容

1.折半查找算法

折半查找算法的思路:

初始状态:假设表长为n,low、high和mid分别指向待查元素所在区间的下界、上界和中点,key为给定值,初始时,令low=0,high=n-1,mid=(low+high)/2 让key与mid指向的记录比较

若key==r[mid].key,查找成功,算法结束;若keyr[mid].key,则low=mid+1;重复上述操作,直至low>high时,查找失败。2.起泡排序算法

起泡排序的思路:

首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(即L.r[1].key>L.r[2].key),则将两个记录交换之,然后比较【第二个记录和第三个记录】的关键字。以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。上述过程称做第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上,然后进行第二趟起泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。一般地,第i躺起泡排序是从L.r[1]到L.r[n-i+1]以此比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最大的记录被交换到第n-i+1的位置上。整个排序过程需进行k(1

首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以a[0]为基准,接下来从a[0]...a[9] 中找出最小的元素,将其与a[0]交换,然后将基准位置右

移一位,重复上面的动作,比如,以a[1]为基准,找出a[1]至a[9]中最小的,将其与a[1]交换,一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序)。4.直接插入排序算法

直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的,记录数增1的有序表。

一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r[1...i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列r[1....i].在自i-1起往前搜索的过程中,可以同时后移记录。

整个排序过程为进行n-1躺插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止

三、程序源代码

1.二叉排序树的创建、遍历和查找删除算法

#include #include typedef int KeyType;typedef struct node { KeyType data;struct node *lchild,*rchild;}LNode,*Tree;

void Insert(Tree &T,KeyType key){

if(!T){ T=new LNode;T->data=key;T->lchild=T->rchild=NULL;} else

} {

} if(keydata)Insert(T->lchild,key);else Insert(T->rchild,key);void CreatTree(Tree &T)//二叉排序树的创建 {

} int num;char c;while(scanf(“%d”,&num)){

} Insert(T,num);c=getchar();if(c=='n')return;void In_Order(Tree T)//中序遍历 {

if(T){ In_Order(T->lchild);printf(“%d ”,T->data);} In_Order(T->rchild);} void Delete(Tree &p){

Tree q,s;if(!p->rchild){

q = p;p=p->lchild;free(q);} else if(!p->lchild){

} q = p;p=p->rchild;free(q);

else {

} q = p;s = p->lchild;while(s->rchild){

} q = s;s = s->rchild;p->data = s->data;if(q!=p)q->rchild = s->lchild;else q->lchild = s->lchild;free(s);} void DelNode(Tree &T,KeyType key){

} if(!T){ printf(“n该结点不存在n”);return;} else {

} if(key == T->data)Delete(T);else if(key data)DelNode(T->lchild, key);else DelNode(T->rchild,key);Tree Search(Tree T,KeyType key)//二叉排序树查找

{

if(!T){

} printf(“该结点不存在”);return 0;else if(key == T->data)return T;else if(key data)

return(Search(T->lchild, key));else return(Search(T->rchild, key));} int main()//主函数 { Tree T,p;T=NULL;KeyType x;

printf(“请输入二叉树各结点:n”);

CreatTree(T);

printf(“中序遍历为:n”);In_Order(T);printf(“n请输入要查找和删除的结点:n”);scanf(“%d”,&x);p=Search(T, x);if(p){

} DelNode(T, x);printf(“中序遍历为:n”);In_Order(T);

}

2、冒泡排序和折半查找算法

#include #include #define M 10 //冒泡排序

int BubbleSort(int c[]){

int i,t,j;for(i=0;i

} for(j=0;j

} if(c[j]>c[j+1]){

} t=c[j];c[j]=c[j+1];c[j+1]=t;

printf(“n您所输入的数字的升序排列是:nn”);for(i=0;i

int BinarySearch(int b[]){

} int t,mid;int i=0;int j=9;printf(“nn请输入您要查找的数字:”);scanf(“%d”, &t);while(i

} return 1;if(t==b[mid]){ printf(“n您要查找的数字的排列位置是:%dn”,mid+1);break;} else if(t

int main(int argc,char *argv[]){

int a[10];printf(“请您输入数据:nn”);for(int i=0;i

} } BubbleSort(a);BinarySearch(a);return 0;

3、简单选择排序和简单插入排序算法

#include int SelectionSort(int*a,int n){

int i,j,min,p,key,k;

for(i=0;i

{

key=0;

min=a[i];

} for(j=i;j

if(a[j]

if(key==1){a[p]=a[i];

a[i]=min;}

for(k=0;k

printf(“%d ”,a[k]);printf(“n”);

return 1;} int InserSort(int*a,int n){

int i,j,k;for(i=2;i

a[0]=a[i];for(j=1;j

{

if(a[j]>a[i]){for(k=i;k>j;k--)

a[k]=a[k-1];

a[k]=a[0];

}

}

break;} } for(j=1;j

int a[80],i,n,b;printf(“请输入关键字的个数:”);scanf(“%d”,&n);printf(“排序类型:n”);printf(“1.选择排序n”);printf(“2.插入排序n”);printf(“请选择:”);scanf(“%d”,&b);switch(b){

case 1:

printf(“请输入关键字:n”);for(i=0;i

SelectionSort(a,n);

return 1;

break;

case 2:

printf(“请输入关键字:n”);

for(i=1;i

scanf(“%d”,&a[i]);} printf(“插入排序的流程以及结果:n”);

InserSort(a,n);return 1;

} break;}while(a!=0);

四、实验运行结果

1.二叉排序树的创建、遍历和查找删除算法

2、冒泡排序和折半查找算法

3、简单选择排序和简单插入排序算法

七、心得体会

通过本次的数据结构课程设计报告,掌握了查找和排序的几种基本排序算法,了解了他们各自的特点和优缺点,完成了对于他们C语言的描述和实际应用,对他们有了一个更加具体、深刻的认识,同时也锻炼了我们的逻辑思维能力和动手实践能力,使我们受益匪浅,给我们今后的计算机专业课程学习带来很大的帮助。

《数据结构课程设计查找排序.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数据结构课程设计查找排序
点击下载文档
相关专题 数据结构课程设计排序 数据结构 课程设计 数据结构课程设计排序 数据结构 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文