【问题标题】:C Language - how do I fix my Binary Search Function in my code?C 语言 - 如何在我的代码中修复我的二进制搜索功能?
【发布时间】:2013-03-15 19:07:55
【问题描述】:

这就是我所拥有的

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

void print(int a[], int size);     
void sort (int a[], int size);     
void swap (int* a, int *b);     
int search(int searchValue, int a[], int size);     

int main()     
{     
    float avg = 0;     
    float sum = 0;     
    float arrayr [50];     
    int i = 0;     
    int j = 0;     
    int a;     
    int b;     
    int sid = 1;     
    int number;     
    int size = sizeof(arrayr) / sizeof(int);     
    sort(arrayr,size);     
    print(arrayr,size);     

    FILE* fp;
    fp =  fopen("A7data.txt","r");
    if(fp==0)
    {
        printf("File does not exist");
        exit(1);
    }

        for (i=0; i<50; i++)
    {
        fscanf(fp,"%d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d",&arrayr[i]);
    }
    sort(arrayr,50);
        //printf("%d",a[i]);
        printf("Enter student ID -> ");
        scanf("%d",&sid);
        if (sid == 0)
        {
        printf("%d is not a valid student ID\n",search(number,arrayr,size));
        }
        else
        {
        printf("%d is a valid student ID\n",search(number,arrayr,size));
        }

return 0;
}

void print (int a[], int size)
{
    int i;
    int sid = 0;
    int number;
    int arrayr;
    //for (i = 0; i < size; i++)

    //printf("\n");
}

void sort (int a[], int size)
{
    int i,j;
        for (i = 0; i < size - 1; i++)
    {
        for (j = i; j < size; j++)
    {
        if (a[j]<a[i]) swap(&a[i],&a[j]);
    }
}
}

void swap (int* a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

 int search(int searchValue, int a[], int size)
{
        int low, high, middle;
        int sid;
        low = 0;
        high = size-1;
        while (low <= high)
{
    middle = (low + high) / 2;
    if (searchValue < a[middle])
    {
        high = middle - 1;
    }
    else if (searchValue > a[middle])
    {
        low = middle + 1;
    }
    else
    {
        return middle;
    }
}
return sid;
}

这是我的输出

 Enter student ID -> 20119084

 2001840454 is a valid student ID

Process returned 0 (0x0)   execution time : 2.816 s
Press any key to continue.

分配方向是 读取作业 7 学生数据文件的副本。它正好有 50 条记录。将学生 ID(文件中的第 1 列)存储到一个数组中。 按升序对数组进行排序。 编写一个二分查找函数来演示以下内容。

56874837 是有效的学生证。 56874838 不是有效的学生证。

http://voyager.deanza.edu/~bentley/ass7data.html 这是我们应该读取的数据文件

我的代码没有显示正确的输出,我认为这是因为我的二进制搜索函数或我的函数中的某些内容有误。我不确定我做错了什么,因为我的输出不像路线显示那样显示。

【问题讨论】:

  • 您至少可以确认它已排序吗?通过打印输出?
  • 你为什么要对一个浮点数组进行排序和搜索,其函数可以处理整数数组???
  • 您正在将sid 中的值读取为scanf("%d",&amp;sid);,但将number 传递给search()
  • 你的 fscanf 函数应该是fscanf(fp,"%d",&amp;arrayr[i]);
  • 我的错误,我将“float arrayr[50]”替换为“int arrayr[50]”

标签: c search file-io binary-search file-read


【解决方案1】:

首先,您将number 传递给search,但从未设置过number。剩下的,花点精力,使用调试器或 IDE 或 printf 语句来弄清楚你的代码在做什么......从那里你可以弄清楚如何纠正它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 2013-12-12
    • 2020-10-06
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2014-09-10
    相关资源
    最近更新 更多