0%

分支和循环练习-二分法-在有序数组中找到一个数

文章时效性提示

本文发布于 520 天前,部分信息可能已经改变,请注意甄别。

在一个有序数组中查找某个具体数字n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main() {
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int k = 7;
    //写代码,在数组中找到7
    int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);//算出数组中元素个数
    for (i=0; i<sz; i++) {
        if (k == arr[i]) {
            printf("找到了,下标是:%d\n",i);
            break;
        }
    }
    if (i == sz) {
        printf("找不到");
    }
    return 0;
}

使用二分法-在有序数组中找到一个数

使用二分法-查找效率高

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main() {
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int k = 11; //要查找的数字
    int sz = sizeof(arr)/sizeof(arr[0]);//算出数组中元素个数
    int left = 0;
    int right = sz - 1;//右下标,就是元素个数减1
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] > k) {
            right = mid - 1;
        }
        else if(arr [mid] < k)
        {
            left = mid + 1;
        }
        else
        {
            printf("找到了,下标是:%d\n",mid);
            break;
        }
    }
    if (left > right) {
        printf("没找到");
    }
    return 0;
}