实验五
1.使用二分查找,在一组有序元素中查找数据项
方式一:形参是数组,实参是数组名
#include <stdio.h> const int N=5; int binarySearch(int x[],int n,int item); int main() { int a[N]={1,3,9,16,21}; int i,index,key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项:\n"); scanf("%d",&key); index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n",key,index); else printf("%d不在数组中\n",key); return 0; } int binarySearch(int x[],int n,int item){ int low,high,mid; low=0; high=n-1; while(low<=high){ mid=(low+high)/2; if(item==x[mid]) return mid; else if(item<x[mid]) high=mid-1; else low=mid+1; } return -1; }
方式二:形参是指针变量,实参是数组名,使用指针变量间接访问方式
#include <stdio.h> const int N=5; int binarySearch(int *x,int n,int item); int main(){ int a[N]={1,3,9,16,21}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项;"); scanf("%d",&key); index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n",key,index); else printf("%d不在数组\n",key); return 0; } int binarySearch(int *x, int n,int item){ int low,high,mid; low=0; high=n-1; while(low<=high){ mid=(low+high)/2; if(item==*(x+mid)) return mid; else if(item<*(x+mid)) high=mid-1; else low=mid+1; } return -1; }
、
2.用选择法对字符串按字典序排序
#include <stdio.h> #include <string.h> void selectSort(char str[][20],int n); int main(){ char name[][20]={"Jorn","Alex","Joseph","Candy","Geoge"}; int i; printf("输出初始名单:\n"); for(i=0;i<5;i++) printf("%s\n",name[i]); selectSort(name,5); printf("按字典序输出名单:\n"); for(i=0;i<5;i++) printf("%s\n",name[i]); return 0; } void selectSort(char str[][20],int n){ int i,j; char t[20]; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) { if(strcmp(str[j],str[j+1])>0) { strcpy(t,str[j]); strcpy(str[j],str[j+1]); strcpy(str[j+1],t); } } }
实验总结:数组名形式参数写法为int x[ ],指针变量形式参数写法为int *x。
使用选择法对字符串排序时应该注意字符串的比较和赋值,不能直接使用关系运算符和赋值运算符,要借助字符串处理函数。
https://www.cnblogs.com/MR-XN/p/10932596.html
https://www.cnblogs.com/hsc6/p/10933456.html
https://www.cnblogs.com/jiyuan201088/p/10932901.html