• C语言的查找


    顺序查找

    猜数游戏

    完整代码

    二分查找

    思路分析

    二分查找方法的具体实现

    二分查找的完整代码

    顺序查找

    猜数游戏

            从键盘中任意输入一个数,判断数列中是否包含该数【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值, 找不到提示没有。

    • 首先对整个数组进行遍历,如果相等返回数组下标
    1. //遍历
    2. int i;
    3. for (i = 0; i < arrLen; i++) {
    4. if (arr[i] == val) {
    5. return i;
    6. }
    7. }
    8. //如果在for循环中没有找到,则返回-1;
    9. return -1;
    • main方法中,arrLen使用sizeof()方法可以得到,并且用index获取方法的返回值
    1. int arr[] = { 23,1,34,88,100 };
    2. int arrLen = sizeof(arr) / sizeof(int);
    3. int index = seqSearch(arr, arrLen, 10);
    4. if (index != -1) {
    5. printf("找到了,当前下标值为%d", index);
    6. }
    7. else {
    8. printf("没有找到该数据!");
    9. }
    10. getchar();

    完整代码

    1. //顺序查找
    2. #include
    3. int seqSearch(int arr[], int arrLen, int val) {
    4. //遍历
    5. int i;
    6. for (i = 0; i < arrLen; i++) {
    7. if (arr[i] == val) {
    8. return i;
    9. }
    10. }
    11. //如果在for循环中没有找到,则返回-1;
    12. return -1;
    13. }
    14. void main() {
    15. int arr[] = { 23,1,34,88,100 };
    16. int arrLen = sizeof(arr) / sizeof(int);
    17. int index = seqSearch(arr, arrLen, 10);
    18. if (index != -1) {
    19. printf("找到了,当前下标值为%d", index);
    20. }
    21. else {
    22. printf("没有找到该数据!");
    23. }
    24. getchar();
    25. }

    二分查找

            请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,
            输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。二分查找的前提是,该数组是一个有序数组

    思路分析

    • 比如我们要查找的数是findVal
    • 如果midVal >  findVal 说明, 应该在midVal 的左边查找
    • 如果midVal <  findVal 说明, 应该在midVal 的右边查找
    • 如果midVal ==  findVal, 说明找到

    二分查找方法的具体实现

    • 先找到数组中间这个数的下标,两者相加/2得到的是中间的位置,中间位置对应的就是数组的中间值
    1. int midIndex = (leftIndex + rightIndex) / 2;
    2. int midVal = arr[midIndex];
    • 之后进行递归操作
    1. //如果midVal > findVal 说明, 应该在midVal 的左边查找
    2. if(midVal > findVal) {
    3. binarySearch(arr, leftIndex, midIndex-1, findVal);//!!!
    4. } else if(midVal < findVal){//如果midVal < findVal 说明, 应该在midVal 的右边查找
    5. binarySearch(arr, midIndex+1, rightIndex, findVal);//!!!
    6. } else {
    7. return midIndex; //返回该数的下标
    8. }
    • 递归操作之后,如果左边的下标值大于右边的下标值,则说明这个数组都比较过,但还是没有找到
    1. if( leftIndex > rightIndex) {
    2. return -1;//!!!!
    3. }

    二分查找的完整代码

    1. //二分查找
    2. #include
    3. //二分查找
    4. int binarySearch(int arr[], int leftIndex, int rightIndex, int findVal) {
    5. //先找到数组中间这个数 midVal
    6. int midIndex = (leftIndex + rightIndex) / 2;
    7. int midVal = arr[midIndex];
    8. //如果leftIndex > rightIndex, 说明这个数组都比较过,但是没有找到
    9. if( leftIndex > rightIndex) {
    10. return -1;//!!!!
    11. }
    12. //如果midVal > findVal 说明, 应该在midVal 的左边查找
    13. if(midVal > findVal) {
    14. binarySearch(arr, leftIndex, midIndex-1, findVal);//!!!
    15. } else if(midVal < findVal){//如果midVal < findVal 说明, 应该在midVal 的右边查找
    16. binarySearch(arr, midIndex+1, rightIndex, findVal);//!!!
    17. } else {
    18. return midIndex; //返回该数的下标
    19. }
    20. }
    21. void main() {
    22. int arr[] = { 1,8, 10, 89, 1000, 1234 };
    23. int arrLen = sizeof(arr) / sizeof(int);
    24. int index = binarySearch(arr, 0, arrLen - 1, 1000);
    25. if (index != -1) {
    26. printf("找到 index = %d", index);
    27. }
    28. else {
    29. printf("没有找到");
    30. }
    31. getchar();
    32. }
  • 相关阅读:
    2022 年 JavaScript 开发工具的生态,别再用过时的框架了
    Spring基础:快速入门spring cloud(1):Spring Cloud介绍
    【优化选址】基于遗传算法求解分布式电源的选址定容问题附matlab代码
    【spring】初识spring基础
    Pre-trained Language Models Can be Fully Zero-Shot Learners
    Trino 387 JVM 配置详解
    DSPE-PEG-Silane,DSPE-PEG-SIL,磷脂-聚乙二醇-硅烷修饰二氧化硅颗粒用
    抖音视频笔记
    如何在Kubernetes中使用cert-manager部署SSL
    纯前端导出excel表格 使用xlsx-style 可自定义样式,行高,打印属性,页边距,多表格压缩包下载
  • 原文地址:https://blog.csdn.net/qq_47896523/article/details/126348695