zoukankan      html  css  js  c++  java
  • C语言查找算法

    /**

     查找(数组)

     1> 顺序查找 : 就是遍历数组每一个元素同该元素比较,但是问题是效率比较低

     2> 折半查找 : 条件是数组必须是有顺序的

     */

    #include <stdio.h>

    #define n 2

    int main()

    {

        // 折半查找

            /*

             思路:将该元素同中间元素比较,如果有则存在,否则,判断该元素在哪半部分,继续查找;

             */

        

        // 任意输入整数x,在有顺序的数组中查找是否有同x值相同的元素

        // 定义输入数据

        int x = -1;

        // 数组array

        int array[10] = {2, 10, 19, 22, 34, 36, 55, 67, 76, 88};

        scanf("%d", &x);

        // 定义开始元素下标start, 尾标end, 中间元素下标mid

        int start = 0;

        int end = 9;

        int mid = (start + end)/2;

        while (array[mid] != x && (end > start)){

              if (x < array[mid]) {         

                end = mid - 1;

            }else{

                

                start = mid + 1;

            }

            mid = (start + end)/2;

        }

        printf("%d ", mid);

        return 0;

    }

    #include <stdio.h>

    #pragma mark 折半查找 前提是该数组为顺序数组,同时折半查找还能用于插入有序数组中得位置,

    #pragma mark 当然我们也可以用for循环查找元素,但是效率较低,当面对大量数据有序数据是,折半查找效率比较高

    #pragma mark 如果我们面对一些无须的数据时,如果查找一组数据中是否含有某个数据时,可以先排序,然后用折半查找该元素

    #pragma mark 折半查找

    int zheban_array(int *array, int len, int num)

    {

        int start = 0;

        int end = len-1;

        

        // 循环的条件

        while (start<=end) {

            int mid =(start+end)/2;

            if (array[mid]<num) {

                start = mid+1;

            }else if(array[mid]>num){

                end = mid-1;

            }else{

                return mid; // 如果是查找插入元素的话 mid+1就是要插入的位置(查找到存在的插入的元素)

            }

    //        mid = (start+end)/2;

        }

        return -1; //如果查找的话,return start 就是要插入的位置(查找插入的不存在的元素)

    }

    #pragma mark 遍历数组

    void  printf_array(int *array, int len){

        

        for (int i = 0; i<len; i++) {

            printf("%d ", array[i]);

        }

        printf(" ");

    }

    int main()

    {

        int array[] = {3, 5, 8, 23, 34, 65, 99};

        int len = sizeof(array)/sizeof(int);

        int n = zheban_array(array, len, 34);

        printf("%d ", n);

        return 0;

    }

  • 相关阅读:
    警告:ORA-00600 2252 错误正在SCN问题下不断爆发(转)
    Linux批量清除木马文件photo.scr
    500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. 421 Service not available, remote server has closed connection
    Linux后门入侵检测工具(转)
    解决Docker无法删除镜像
    通过DataX从Oracle同步数据到MySQL-安装配置过程
    Server2008 R2安装、配置Freesshd(Jenkins持续集成-Windows)
    Mysql死锁解决办法
    Mssql 2017修改master默认排序规则
    可能需要用到的Mac技巧or软件
  • 原文地址:https://www.cnblogs.com/-boy/p/4020803.html
Copyright © 2011-2022 走看看