算法——二分查找算法

来源:互联网 发布:淘宝店铺未来发展趋势 编辑:程序博客网 时间:2024/06/05 20:16

从有序数组中查找需要数据


【引用】

算法——快速排序


【解决方案】

#include <stdio.h>#include <stdlib.h>#include <windows.h>// 递归二分查找int BinarySearch( int Array[], int start, int end, int Value ){    int index = start+(end-start+1)/2;    Data[glbIndex] = Array[index];    glbIndex++;    if( Array[index] == Value )    {        return index;    }    else    {        if( index == start )            return -1;        if( Array[index] > Value )            return BinarySearch( Array, start, index - 1, Value );        else            return BinarySearch( Array, index + 1, end, Value );    }}// 获得随机的数void GenRandomData( int Array[], int Count ){    for( int i = 0; i < Count; i++ )    {        Array[i] = rand() % 60;    }}// 打印数组void printArray( int Array[], int Count ){    printf( "Array is:" );    for( int i = 0; i < Count; i++ )    {        printf("%2d ", Array[i] );    }    printf( "\n");}int main( int argc, char* argv[] ){    srand( GetTickCount() );    int Array[20] = {0};    GenRandomData( Array, 20 );    int index = rand() % 20;    int Key1 = Array[index];    printArray( Array, 20 );    printf( "Key1: Before sort Array[%d]=%d \n", index, Array[index] );    glbIndex = 0;    QSort( Array, 0, 19 );    int Key2 = Array[index];    printArray( Array, 20 );    printf( "Key2: After sort  Array[%d]=%d \n", index, Array[index] );    int Index1 = BinarySearch( Array, 0, 19, Key1 );    // 判断是否查找成功    if( Array[Index1] == Key1 )    {        printf( "Key1:%d find Suc in pos %d\n", Key1, Index1 );    }    int Index2 = BinarySearch( Array, 0, 19, Key2 );    // 判断是否查找成功    if( Array[Index2] == Key2 )    {        printf( "Key2:%d find Suc in pos %d\n", Key2, Index2 );    }    return 0;}

测试结果:
这里写图片描述

如何去理解二分查找呢,就像以前有个节目猜商品价格,其实二分查找和这个就挺相似,整个价格从0到无穷是一个有序序列(当然实际商品是有个初略的大概范围的,假设3000 - 8000 )那么二分查找就是不断的取中间值,去进行判断,然后根据结果(高了还是低了),再一个更小的空间内继续查找。当然二分不一定是最有效率的,例如一种产品的价格区间是3000-8000之间,但是如果这个产品是最新出产,并且是知名品牌,那么估计中等偏上的时候的可以更加有效率。

所以当给二分添加一个变量进行调控的时候,就可以实现动态二分,这样就可以有更好的策略选择。


【返回】

算法——分类目录

0 0