2013-03-26 77 views
-2

這是我C語言 - 如何解決我的代碼中的二進制搜索功能?

#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是一個有效的學生ID。 56874838不是有效的學生證。

http://voyager.deanza.edu/~bentley/ass7data.html 這是我們應該讀

我的代碼沒有顯示正確的輸出數據文件,我想這是因爲我在我的功能二進制搜索功能,或什麼是錯的。我不確定我做錯了什麼,因爲我的輸出沒有像路線顯示那樣出現。

+0

您能否至少確認它是否已排序?通過打印輸出? – 75inchpianist 2013-03-26 04:38:05

+0

你爲什麼要嘗試排序和搜索浮點數組,並使用與int數組一起工作的函數? – 2013-03-26 04:38:35

+0

您正在讀'sid'中的值爲'scanf(「%d」,&sid);',但將'number'傳遞給'search()' – Rohan 2013-03-26 04:39:59

回答

0

對於初學者,您通過numbersearch,但number從未設置。對於其他人來說,可以使用調試器或IDE或printf語句來弄清楚你的代碼在做什麼......從那裏你可以找出如何糾正它。