实验五

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

posted @ 2019-05-27 23:12  汪平安  阅读(102)  评论(1编辑  收藏  举报