C语言基础(7)二分查找和字符数组

一、二分查找法

二分查找法是一种在有序数组中查找某一特定元素的高效算法。其基本思想是通过逐步缩小查找范围来快速定位目标元素。具体步骤如下:

  1. 初始条件:确保数组是有序的(升序或降序)。
  2. 设定左右边界:设定初始的左边界 begin 和右边界 end,一般为数组的起始和结束位置,即 begin = 0,end = n - 1
  3. 计算中间位置:计算当前查找范围的中间位置 mid,通常使用公式 mid = (begin + end) / 2
  4. 比较中间元素:将中间位置的元素 array[mid] 与目标元素 target 进行比较:
    • 如果 array[mid] == target,则找到了目标元素,返回 mid
    • 如果 array[mid] < target,则目标元素在右半部分,将左边界beign调整为 mid + 1
    • 如果 array[mid] > target,则目标元素在左半部分,将右边界end调整为 mid - 1
  5. 重复步骤3和4:不断调整查找范围,直到找到目标元素或查找范围为空(即 begin > end)。

实例代码:

int main(void)
{   
    int n, a[] = {9,8,7,6,5,4,3,2,1,0};
    int len = sizeof(a) / sizeof (a[0]);
    int begin = 0 , end = len - 1,mid;
    scanf("%d"&n);
   
    for(int i = 0 ; i < len ; ++i)
    {
        printf("%d\t",a[i]);
    }
    while(begin <= end)
    {
        mid = (begin + end) / 2;
        if(a[mid] > n)
        {
            end = mid - 1;
        }
        else if( a[mid] < n ) 
        {
            begin = mid + 1;
        }
        else 
        {
            break;
        }
    }
    if(begin <= end)
    {
        printf("\nFound:%d,index = %d\n",a[mid],mid);
    }
    else
    {
        printf("\nNot Found:%d,index = %d\n",a[mid],mid);

    }
    return 0;
}

二、字符数组

1.定义

        字符数组通常用于存储字符串。字符串是以字符数组的形式表示,并且以空字符 \0 结尾来标志字符串的结束。

字符数组有几种定义方式:

1.直接定义和初始化字符数组

char str1[] = "Hello, World!";

2.手动指定数组大小并初始化

char str2[14] = "Hello, World!";

3.手动逐个字符初始化

char str3[] = {'H', 'e', 'l', 'l', 'o','\0'};

4.定义未初始化的字符数组

char str4[20]; // 定义一个可以存储20个字符的字符数组

2.遍历统计

1.遍历(遍历数组并输出元素)

int main(void)
{
    char s[16] = "Hello World!";
   // puts(s);
    int i = 0 ;
    while( s[i] != '\0')
    {
        putchar(s[i]);
        ++i;
    }
    putchar('\n');
    return 0;
}

2.拷贝(将字符串s1的内容复制到s2)

int main(void)
{
    char s1[100] = "Hello World!";
    char s2[100];
    int i = 0;
    while(s1[i])
    {
        s2[i] = s1[i];
        ++i;
    }
    s2[i] = '\0';
    puts(s2);
    return 0;
}

3.拼接(将字符串b拼接到字符串a后面)

int main(void)
{
    char a[100] = "Hello";
    char b[100] = "World!";
    int i = 0 , j = 0;
    while(a[i])
    {
        ++i;
    }
    while(b[j])
    {
        a[i] = b[j];
        ++i;
        ++j;
    }
    b[i] = 0;
    puts(a);
    return 0;
}

4.比较字符串

int main(void)
{
    char a[100] = "Hello";
    char b[100] = "World";
    int i = 0;
    while(a[i] == b [i] && a[i] && b[i])
    {
        ++i;
    }
    if(a[i] - b[i] > 0)
    {
        printf("a > b\n");
    }
    else if(a[i] - b [i] == 0)
    {
        printf("a = b\n");
    }
    else
    {
        printf("a < b\n");
    }

    return 0;
}

5.字符串逆序

int main(void)
{
    char s[100];
    fgets(s,sizeof(s) / sizeof(s[0]),stdin);
    int i ;
    for(i = 0 ; i < strlen(s) / 2; ++i)
    {
        char t;
        t = s[i];
        s[i] = s[strlen(s) - i - 1];
        s[strlen(s) - i - 1] = t;
    }
    puts(s);
    return 0;
}

   

puts

作用:输出字符串到标准输出,并在末尾自动添加一个换行符。

int puts(const char *str);

gets

作用:从标准输入读取一行字符串,并存储在指定的字符数组中,以空字符 \0 结尾。

char *gets(char *str);

strlen 函数

strlen 函数用于计算字符串的长度(不包括结尾的空字符 \0)。

size_t strlen(const char *str);

        <string.h>头文件定义了许多用于字符串的函数,这些函数可以方便地对字符串进行复制、连接、比较、查找等操作。以下是一些常用的字符串操作函数及其说明:

  1. 字符串复制

    • char *strcpy(char *dest, const char *src); 将字符串 src 复制到 。
    • char *strncpy(char *dest, const char *src, size_t n); 将字符串 src 的前 n 个字符复制到 dest
  2. 字符串连接

    • char *strcat(char *dest, const char *src); 将字符串 src 连接到 dest 的末尾。
    • char *strncat(char *dest, const char *src, size_t n); 将字符串 src 的前 n 个字符连接到 dest 的末尾。
  3. 字符串比较

    • int strcmp(const char *str1, const char *str2); 比较字符串 str1str2,返回值小于、等于或大于0分别表示 str1 小于、等于或大于 str2
    • int strncmp(const char *str1, const char *str2, size_t n); 比较字符串 str1str2 的前 n 个字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值