在循环数组中查找某个数K

来源:互联网 发布:ipad如何看淘宝直播 编辑:程序博客网 时间:2024/06/16 09:52

一 循环数组

例如 4 5 6 7 8 9 1 2 3, 循环有序


二 类似于二分查找的思想,首先定位到中间,然后判断左右两个区间,哪个是有序的(一定有一个是有序的),然后判断k是不是在这个有序区间来判断下一步在哪个区间去查找

#include <string.h>#include <stdio.h>//在循环数组中寻找kint main(){    int a[9] = {1,2,3,4,5,6,9,90,100};    int n = 9;    int l = 0;    int h = n-1;    int mid;    int k = 6;    while (l <= h)    {        mid = (l+h)/2;        printf("%d %d %d\n", l, h, mid);        if (a[mid] == k)            break;        if (a[l] < a[mid])        {            if (k < a[mid] && a[l] <= k)                h = mid-1;            else                l = mid+1;        } else        {            if (k >= a[mid+1] && k <= a[h])                l = mid+1;            else                h = mid-1;        }    }    printf("%d\n", mid);    return 0;}


原创粉丝点击