第5次实验

一, 二分法查找

1.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_s("%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;
}

1.2

#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_s("%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>
#include <string.h>
void selectSort(char str[][20], int n); // 函数声明,形参str是二维数组名
int main() {
    char name[][20] = { "John", "Alex", "Joseph", "Candy", "Geoge" };
    int i;

    printf("输出初始名单:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);

    selectSort(name, 5);  // 调用选择法对name数组中的字符串排序

    printf("按字典序输出名单:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);

    return 0;
}

// 函数定义
// 函数功能描述:使用选择法对二维数组str中的n个字符串按字典序排序
void selectSort(char str[][20], int n) {
    // 补足代码
    int i, j, k;
    char temp[20];
    for (i = 0; i < n - 1; i++) {
        k = i;
        strcpy_s(temp, str[i]);
        for (j = i + 1; j < n; j++)
            if (strcmp(str[j], str[k]) < 0)
                k=j;
        strcpy_s(temp, str[j]);

        if (k != i) {
            strcpy_s(temp, str[i]);
            strcpy_s(str[i], str[k]);
            strcpy_s(str[k], temp);
        }
    }
}

独立的 不借助书本和同学的帮助完成一个实验还是有困难 需要多加练习

posted on 2019-05-27 22:01  parzival  阅读(113)  评论(0)    收藏  举报

导航