[C] búsqueda binaria

Curso: Estructura de Datos ( Chen Yue , Ho Ming Chin )


Este problema se requiere para lograr algoritmo de búsqueda binaria.

Función de definición de interfaz:

Position BinarySearch( List L, ElementType X );

En el que la Listestructura se define como sigue:

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

LEs una tabla de usuario entrante lineal, que ElementTypelos elementos pueden ser>, ==, <comparar los datos entrantes y para asegurar que el sujeto se incrementa ordenó. Función BinarySearchpara encontrar Xla Dataposición, es decir, los subíndices de matriz (Nota: los elementos de almacenamiento de inicio subíndice 1). Hallazgo subíndice se devuelve, de lo contrario una marca especial de fallo NotFound.

programa de prueba Árbitro Ejemplo:

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

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );

int main()
{
    List L;
    ElementType X;
    Position P;

    L = ReadInput();
    scanf("%d", &X);
    P = BinarySearch( L, X );
    printf("%d\n", P);

    return 0;
}

/* 你的代码将被嵌在这里 */

Ejemplo de entrada 1:

5
12 31 55 89 101
31

Muestra de Producto 1:

2

Ejemplo de entrada 2:

3
26 78 233
31

Muestra Producto 2: 

0

código:

El alcanzar la función readinput () se utiliza para probar los detalles en la parte final del código, no es perfecto pero se puede utilizar.

Tenga en cuenta que los antiguos miembros de la estructura de la carrocería se inicializa, un puntero a alojar la estructura de memoria, o va a un error de memoria.

Referencias: C estructura del lenguaje puntero de inicialización

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

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};
typedef struct LNode *List;

List ReadInput(); /* 元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );

int main()
{
    List L;
    ElementType X;
    Position P;

    L = ReadInput();
    
    scanf("%d", &X);
    P = BinarySearch( L, X );
    printf("%d\n", P);

    return 0;
}

/* 你的代码将被嵌在这里 */
Position BinarySearch( List L, ElementType X ){
    Position minP = 1, maxP = L->Last, midP;
    Position retP = NotFound;
    while(minP <= maxP ){
        midP = (minP + maxP)/2;
        if(L->Data[midP] == X){
            retP = midP;
            break;
        }
        else if(L->Data[midP] > X){
            maxP = midP - 1;
            continue;
        }
        else{
            minP = midP + 1;
            continue;
        }
    }
    return retP;
}

/* 输入数据存入结构对象中,返回指针 */
List ReadInput(){
    List pList = (List)malloc(sizeof(struct LNode));
    pList->Data[0] = 0;
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++){
        scanf("%d",&(pList->Data[i]));
    }
    pList->Last = n;
    return pList;
}

 

Publicado 37 artículos originales · ganado elogios 47 · Vistas de 100.000 +

Supongo que te gusta

Origin blog.csdn.net/u013378642/article/details/105036929
Recomendado
Clasificación