排序与查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
排序与查找
1.实验目的
掌握在数组上进行排序和查找的方法和算法
理解方法特点,并能灵活运用
加深对排序和查找方法的理解,逐步培养解决实际问题的编程能力
题1
编写程序,使用冒泡排序法对给定数组进行排序。(数组可自定,例如a[]={210,108,65,49,72,88,67,5,19,36,
90,35,1,112,215,6,23,46,51,29,77,19,0,55,27,48,18,22,30,56})
实验流程图如下:
题2
使用折半查找法对给定的有序数组进行查找。数组可自行定义。
题一的实验结果如下
:
分析:
冒泡排序既是将数据一个一个比较,将大的不断往后放,知道所有数据都进行了比较,循环结束。
题二实验结果如下:
分析:
折半查找需要数据有序,本实验在递增的情况下进行的,所以对数据需要输入递增序列,然后将数据与最中间的进行比较,如果大,则在后一半进行查找,然后继续依次比较,直至查找到对应数据,如果没有,则显示没有。
附代码:
题1
编写程序,使用冒泡排序法对给定数组进行排序。(数组可自定,例如a[]={210,108,65,49,72,88,67,5,19,36,
90,35,1,112,215,6,23,46,51,29,77,19,0,55,27,48,18,22,30,56})
题2
使用折半查找法对给定的有序数组进行查找。数组可自行定义。
#include
void main()
{
int i, n=30, j, m;
int a[]={210,108,65,49,72,88,67,5,19,36,
90,35,1,112,215,6,23,46,51,29,
77,19,0,55,27,48,18,22,30,56};
printf("\nThese integers are as below:\n\n");
for (i=0; i { printf("%6d",a[i]); if ((i+1)%10==0) printf("\n"); } for (i=1; i { for (j=0; j { if (a[j]>a[j+1]) { m=a[j]; a[j]=a[j+1]; a[j+1]=m; } } } printf("\nThe sorted integers:\n\n"); for (i=0; i { printf("%6d",a[i]); if ((i+1)%10==0) printf("\n"); } } #include #define N 51 void main(void) { int a[N]; int i,n,num; int top,bottom,mid; int flag=1; //如果在表列中找到数字,则值为1,否则为0 int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置 printf("你想在多少个数中进行折半查找,请输入(1--50):"); scanf("%d",&n); while(n<1 || n>50) { printf("你输入的数不正确,请重新输入。\n"); printf("你想在多少个数中进行折半查找,请输入(1--50):"); scanf("%d",&n); } printf("请你输入一个整数a[1](需保证递增有序):"); scanf("%d",&a[1]); i=2; while(i<=n) //输入从小到大的表列 { printf("请你输入一个整数a[%d](需保证递增有序):",i); scanf("%d",&a[i]); if(a[i] > a[i-1]) i++; else printf("你输入的数不满足要求,请重新输入。\n"); } //输出表列 printf("\n输出表列\n"); for(i=1; i<=n; i++) { printf("%6d",a[i]); } printf("请你输入要查找的数:"); scanf("%d",&num); flag=1; //假设输入的数在表列中 top=n; bottom=1; mid=(top+bottom)/2; while(flag) { //printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]); if( (num>a[top]) || (numa[top] 或者num { loc=-1; flag=0; } else if(a[mid]==num) //如果num 等于找到的数 { loc=mid; printf("找到数%6d 的位置%2d\n",num,loc); break; } else if(a[mid]>num) //若a[mid]>num,则num 一定在a[bottom]和a[mid-1]范围之内 {