二分查找

来源:互联网 发布:淘宝如何获得淘金币 编辑:程序博客网 时间:2024/06/05 01:01

编译平台:
VC++6.0

描述:
二分查找前数组必须都有序的!

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>void rand_num ( int array[],int len){       int i;    srand(time(NULL));    for(i=0; i<len; i++)    {        array[i] = rand()%100+1;    }   }void bubble( int arr[],int len ){    int i;    int j;    int num = 0;    int tmp;    printf("%d\n",len);    for( i=1; i<len; i++)        for( j=len-1; j>=i; j--)        {            if( arr[j] < arr[j-1]){            tmp = arr[j];            arr[j] = arr[j-1];            arr[j-1] = tmp;            }        }}int half_seek( int arr[],int len, int key ){    int i=0;    int j = len-1;    int flag = 1;    int mid;    if( flag == 1 ){        if( key == arr[i]  ){                printf("%d is found  in array[%d]\n",arr[i],i);                return 0;        }        else if( key == arr[j]){            printf("%d is found  in array[%d]\n",arr[j],j);            return 0;        }    }    flag = 0;    while( i < j ){        mid = (i+j)/2;        if( key > arr[mid])            i = mid + 1;        else if( key < arr[mid])            j = mid -1;        else if( key == arr[mid]){            printf("%d is found  in array[%d]\n",arr[mid],mid);            return 0;        }    }    printf("not found\n");    return -1;}int main(int argc, char *argv[]){       int i=0;    int key;    int array[20] = {0};    int len = sizeof(array)/sizeof(array[0]);    rand_num( array ,len);    bubble( array,len);    for( i=0; i<len;i++){        printf("%3d%c",array[i],(i+1)%5==0?'\n':' ');    }    printf("input a num\n");    scanf("%d" ,&key);    half_seek( array,len,key);    return 0;}遇到的问题:1   在排序的时候for( i=1; i<len; i++)        for( j=len-1; j>=i; j--)        把for( i=1; i<len; i++)写成for( i=0; i<len; i++)就存在问题 仔细分析 1是最好的!2 在定义变量的时候必须要放在程序的最开始 不然就提示没有定义这个变量这是是因为VC++6.0 只支持C89标准 这个标准这么规定的!
1 0
原创粉丝点击