实验五

博客主要围绕C/C++展开,包含二分查找和选择法排序两部分内容。在二分查找中,补足相关程序,修改数组元素值并展示运行结果,该算法用指针间接访问,运行快、内存占用小;在选择法排序中,补足程序,修改字符串数据并给出运行结果。

Part 1:二分查找

      

1.补足程序ex1_1.cpp,附上补足后的程序源码,修改程序中数组元素值,给出运行结果截图

#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.补足程序ex1_2.cpp,附上补足后的程序源码,修改程序中数组元素值,给出运行结果截图

#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;
}

 

 

 小结:使用二分查找算法,查找特定整数item。如果找到,返回item在数组元素中的下标;如果item不在数组中,则返回-1;使用指针进行间接访问,运行快,占用内存小。

Part.2选择法排序

补足程序ex2_2.cpp,附上补足后的程序源码,修改程序中字符串数据数据,给出运行结果截图

// 练习:使用选择法对字符串按字典序排序
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void selectSort(char str[][20], int n); // 函数声明,形参str是二维数组名
int main() {
    char name[][20] = { "John", "Alex", "Joseph", "Candy", "Geoge" };
    int i;
    printf("print the initial name list:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);
    selectSort(name, 5); // 调用选择法对name数组中的字符串排序
    printf("print the name list in alphabetical order:\n");
    for (i = 0; i < 5; i++)
        printf("%s\n", name[i]);
    system("pause");
    return 0;
}
// 函数定义
// 函数功能描述:使用选择法对二维数组str中的n个字符串按字典序排序
void selectSort(char str[][20], int n) {
    // 补足代码
    int i, j, m;
    char temp[20];
    for (i = 0; i < n - 1; i++) {
        m = i;
        for (j = i + 1; j < n; j++)
            if (strcmp(str[j], str[m]) < 0)
                m = j;
        if (m != i) {
            strcpy(temp, str[i]);
            strcpy(str[i], str[m]);
            strcpy(str[m], temp);
        }
    }
}

 

 

 

转载于:https://www.cnblogs.com/txaalo/p/10934696.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值