zoukankan      html  css  js  c++  java
  • 写代码可以在整型有序数组中查找想要的数字

    思路:对数组中的数字进行查找并与目标数字进行比较,一样则可以找到,不一样则没有。

    方法一:在有序的数组中查找一个数字,可以用一个循环的方式将每一个数字依次查找然后挑出所求数字。

     1 #include<stdio.h>
     2 #define _CRT_SECURE_NO_WARNINGS
     3 
     4 int Find_num(int a[], int size, int num)
     5 {
     6     for (int i = 0;i < size; i++)
     7     {
     8         if (a[i] == num)
     9         {
    10             return i;
    11         }
    12     }
    13     return -1;
    14 }
    15 
    16 int main()
    17 {
    18     int num = 0;
    19     printf("请输入想要查询的数字:
    ");
    20     scanf("%d",&num);
    21 
    22     int a[8] = { 1,2,3,4,5,6,7,8 };
    23     int size = sizeof(a) / sizeof(a[0]);
    24     int find_num = Find_num(a, size, num);
    25     if (find_num == -1)
    26     {
    27         printf("没有找到!
    ");
    28     }
    29     else
    30     {
    31         printf("找到了!
    ");
    32         printf("%d", find_num);
    33     }
    34 
    35     return 0;
    36 }

    方法二:因为是有序的数组,数组里的数字会按规律排列,可以利用二分法的方法,将数组分为左右两块,从中间开始和所求数字比较大小,如果所求数字在左区间则继续划分左面的区间,直到找到目标数字。这样的优点是每次可以只查找一半,不用将数组里的内容都查找完,大大提高了效率。

    用二分法进行查找的时候要注意这里区间变换时,left需要+1;right则需要-1.

     1 #include<stdio.h>
     2 #define _CRT_SECURE_NO_WARNINGS
     3 
     4 int Find_num(int a[],int size,int num)
     5 {
     6     int left = 0;
     7     int right = size - 1;
     8     while (left <= right)
     9     {
    10         int i = (left + right) / 2;
    11         if (a[i] < num)
    12         {
    13             left = i + 1;
    14             continue;
    15         }
    16         else if (a[i] > num)
    17         {
    18             right = i -1;
    19             continue;
    20         }
    21         else
    22         {
    23             return i;
    24         }
    25     }
    26     return -1;
    27 }
    28 
    29 int main()
    30 {
    31     int num = 0;
    32     printf("请输入想要查询的数字:
    ");
    33     scanf("%d", &num);
    34 
    35     int a[8] = { 1,2,3,4,5,6,7,8 };
    36     int size = sizeof(a) / sizeof(a[0]);
    37     int find_num = Find_num(a, size, num);
    38     if (find_num == -1)
    39     {
    40         printf("没有找到!
    ");
    41     }
    42     else
    43     {
    44         printf("找到了!
    ");
    45         printf("%d", find_num);
    46     }
    47 
    48     return 0;
    49 }
  • 相关阅读:
    找到IOS中的闪退日志
    day10-单元测试用例
    1、MySQL索引优化分析
    大话处理器-第2章-初识处理器
    sunset: dusk
    CK: 00
    My File Server: 1
    [luogu 5049] 旅行(数据加强版)
    [luogu p1081] 开车旅行
    [luogu p1613] 跑路
  • 原文地址:https://www.cnblogs.com/cuckoo-/p/10312149.html
Copyright © 2011-2022 走看看