首页 > 其他 > 详细

实践6.4

时间:2020-07-20 17:34:48      阅读:73      评论:0      收藏:0      [点我收藏+]

二分法查找(选择排序)

源程序:

#include <stdio.h>
#define MaxSize 8
typedef struct
{
int stuno;
char stuname[20];
}TableElem;

TableElem stu[]={{1009,"wang"},{4400,"ren"},{1001,"zhang"},
{4003,"qin"},{2005,"sun"},{2008,"liu"},{3001,"zheng"},{3005,"lai"}};

typedef struct
{
TableElem elem[MaxSize];
int n;
}SqTable;

//二分查找函数
int bin_search(SqTable *T,int key)
{
int low,high,mid;
low=1;
high=MaxSize;

while(low<=high)
{
mid=(low+high)/2;
if(T->elem[mid].stuno==key)
return mid;
else if(key<T->elem[mid].stuno)
high=mid-1;
else
low=mid+1;
}
return 0;
}
/*
int searchsqtable(SqTable T,int key) //查找函数
{
T.elem[0].stuno=key;
int i=T.n;
while(T.elem[i].stuno!=key)
i--;
return i;
}
*/
//选择排序
void select_sort(SqTable *T,int nn)
{
int min,i,j;
TableElem temp;
for(i=0;i<nn;i++)
{
min=i;
for(j=i+1;j<nn;j++)
{
if(T->elem[j].stuno<T->elem[min].stuno)
min=j;
}
if(min!=j)
{
temp=T->elem[min];
T->elem[min]=T->elem[i];
T->elem[i]=temp;
}
}
}
int main()
{
SqTable seq;
for(int i=0;i<MaxSize;i++)
{
seq.elem[i]=stu[i]; //用stu[8]8个人初始化elem[8]数组
}
seq.n=MaxSize;
//8个人按学号排序
int n=MaxSize;
select_sort(&seq,n);

for(i=0;i<MaxSize;i++)
printf("%d\t%s\t\n",seq.elem[i].stuno,seq.elem[i].stuname);

int kk,mm;

//for(i=0;i<MaxSize;i++)
//{
//seq1.elem[i]=seq.elem[i]; //用stu[8]8个人初始化elem[8]数组
//}

printf("请输入要查找的学号:");
scanf("%d",&kk);
mm=bin_search(&seq,kk); //调用查找函数
printf("此人在顺序表中的位置是:%d\n",mm+1);
printf("%d号的姓名为:%s\n",mm+1,seq.elem[mm].stuname);
return 1;
}

运行结果:

技术分享图片

 

实践6.4

原文:https://www.cnblogs.com/duanqibo/p/13345609.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!