二进制搜索:最小值小于

时间:2016-06-17 12:25:26

标签: c

以下C程序在数组中搜索小于 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar"> <LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/md_grey_200" android:orientation="vertical"> <RelativeLayout android:id="@+id/relative_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/gradient"> <RelativeLayout android:layout_width="120dp" android:layout_height="120dp" android:id="@+id/imageLayout" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:background="@drawable/image_background"> <ImageView android:id="@+id/courseimage" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:background="@drawable/sq_default" android:layout_alignParentTop="true"/> </RelativeLayout> <LinearLayout android:layout_width="60dp" android:layout_height="60dp" android:background="#FFFFFF" android:layout_above="@+id/card_view8" android:layout_toLeftOf="@+id/imageLayout" android:layout_alignLeft="@+id/card_view8" android:layout_alignStart="@+id/card_view8" android:id="@+id/linearLayout11" android:orientation="horizontal"> </LinearLayout> <LinearLayout android:layout_width="60dp" android:layout_height="60dp" android:background="#FFFFFF" android:layout_above="@+id/card_view8" android:layout_toRightOf="@+id/imageLayout" android:layout_alignRight="@+id/card_view8" android:layout_alignEnd="@+id/card_view8" android:orientation="horizontal"> </LinearLayout> <android.support.v7.widget.CardView android:id="@+id/card_view8" android:layout_width="match_parent" android:layout_height="wrap_content" card_view:cardBackgroundColor="#FFFFFF" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_below="@+id/imageLayout" card_view:cardCornerRadius="0dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/coursetitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8dp" android:paddingBottom="8dp" android:text="" android:textColor="#58595b" android:textStyle="bold" android:textSize="17sp" android:maxLines="2" android:layout_marginTop="18dp" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:layout_alignParentTop="true"/> <TextView android:id="@+id/institutetitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="4dp" android:paddingBottom="8dp" android:text="" android:textColor="#58595b" android:maxLines="2" android:textStyle="bold" android:textSize="14sp" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:layout_alignParentTop="true"/> <TextView android:id="@+id/batch_detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="4dp" android:paddingBottom="8dp" android:text="" android:textColor="#58595b" android:maxLines="2" android:textStyle="bold" android:textSize="14sp" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:layout_alignParentTop="true"/> <TextView android:id="@+id/button_enroll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="15sp" android:paddingRight="28dp" android:paddingLeft="28dp" android:paddingTop="12dp" android:paddingBottom="12dp" android:textStyle="bold" android:textColor="#FFFFFF" android:background="@drawable/red_button" android:text="" android:layout_below="@+id/coursetitle" android:layout_marginTop="10dp" android:layout_marginBottom="20dp"/> </LinearLayout> </android.support.v7.widget.CardView> </RelativeLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/md_grey_300" /> <LinearLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="3" android:background="#FFFFFF"> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable" app:tabGravity="fill" app:tabTextColor="@color/md_grey_700" app:tabSelectedTextColor="#fd4347" app:tabIndicatorColor="#fd4347" app:tabIndicatorHeight="2dp" android:layout_marginTop="5dp"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/md_grey_300" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> </android.support.v4.view.ViewPager> </LinearLayout> </ScrollView> 的值。如果“array”中的值是正整数,我可以将其外推到任何数组长度吗?

search
提前做出来, 何塞路易斯

2 个答案:

答案 0 :(得分:1)

是的,您可以通过在array_size中设置所需的大小来获得任何数组长度,但您应该在数组中输入有序数字。 此外,您还可以将last变量更改为低于array_size - 1的值,例如在这种情况下8,但这将限制搜索到8元素。

#include <stdio.h>
#include <stdlib.h> 

int main(void)
{
    int i;
    int array_size = 11;
    int *array = malloc(sizeof(int) * array_size);

    for (i = 0; i < array_size; i++)
        scanf("%d", &array[i]);

    for (i = 0; i < array_size; i++)
        printf("%d \t", array[i]);
        printf("\n");

    int first = 0;
    int last = array_size - 1;
    int search = 7;
    int middle = (first+last)/2;

    while (first <= last)
    {
        if (array[middle] < search)
            first = middle + 1;  

        else if (array[middle] > search)
            last = middle - 1;

        else 
        {
            printf("%d found at indext %d\n", array[middle], middle);  
            return 0; 
        } 

        middle = (first + last)/2;
        printf("first= %d,last= %d, middle= %d, search= %d\n",
                first, last, middle, search);
    }

    printf("%d: Element not found\n", search);   
    return -1;
}

答案 1 :(得分:0)

你在while循环中缺少1行。

#include <stdio.h>

int main()
{
    int array[11] = { 1, 5, 9, 15, 37, 49, 56, 65, 74, 90, 95};

    int first = 0;
    int last = 11;
    int search = 95;
    int middle = (first+last)/2;

    while (first <= last) {
        middle = (first + last)/2; //this line
        if (array[middle] < search)
            first = middle + 1;
        else if (array[middle] > search)
            last = middle - 1;
        else
        {
            printf("Found");
            return 0;
        }
    }
    printf("Not found");
    return 0;
}

更改第一个或最后一个元素时,必须初始化中间值。我每次都这样做,因为这是一个小程序,所以它不会对表演造成很大的伤害。 当你不这样做时,你的中间元素在你搜索时停留在第一个元素之前,这不是你想要的。