2017-11-26 25 views
0

CS50, pset3 찾기에 대한 선택 정렬을 수행 한 후 2 진 검색을 구현하려고합니다.바이너리 검색 및 정렬 - CS50 찾기 pset3

내 논리가 맞다고 생각하지만 내 코드가 어디에 잘못되었는지 알 수 없습니다. 아래는 제 코드입니다.

#include <cs50.h> 

#include "helpers.h" 

#define RANGE 65536 

/** 
* Returns true if value is in array of n values, else false. 
*/ 
bool search(int value, int values[], int n) 
{ 
    // TODO: implement a searching algorithm 
    //binary search 
    int midpoint = ((0 + (n-1))/2); 

    while (n > 0) 
    { 
     if (value == values[midpoint]) 
     { 
     return true; 
     } 
     else if (value < values[midpoint]){ 
     midpoint = ((0 + (midpoint-1))/2); 
     } 
     else if (value > values[midpoint]){ 
     midpoint = (((midpoint+1) + (n-1))/2); 
     } 
     if (value != values[midpoint]) 
     { 
     return false; 
     } 
    } 
    return false; 
} 

/** 
* Sorts array of n values. 
*/ 
void sort(int values[], int n) 
{ 
    // TODO: implement a sorting algorithm 
    //selection sort 
    for (int i = 0; i < n; i++) 
    { 
     int min = i; 

     for (int j = i+1; j < n; j++) 
     { 
      if(values [j]< values[min]) 
      { 
       min = j; 
      } 
      if(min != i) 
      { 
       int exchange = values [min]; 
       values [min] = values [i]; 
       values [i] = exchange; 
      } 
     } 
    } 
    return; 
} 

Error List

는 기본적으로, 나는 내 논리가 대부분 올바른 생각하지만, 다시, 나는 너무 확실하지 않다. 나는 아직 초보자이므로 때로는 가장 간단한 오류에 휘말리게됩니다. 도움을 주시면 대단히 감사하겠습니다.

+0

보고 된 첫 번째 오류로 시작하십시오. 고쳐. 다음 오류 중 하나라도 고칠 수 있는지 확인하십시오. 그러나 첫 번째 오류의 결과 일 수 있습니다. 할 수있는 일을 고쳤으며, 재 컴파일하고, 남은 오류를 동일한 체계적인 방식으로 작업하십시오. –

답변

1

기능이 잘못되었습니다.

예를 들어 무한히 실행될 수 있습니다. 문

else if (value < values[midpoint]){ 
    midpoint = ((0 + (midpoint-1))/2); 
    } 

midpoint가 될 경우의는이 때문에 value 다시 미만의 values[0] 경우 n가 처음 midpoint

int midpoint = ((0 + (n-1))/2); 

0으로 설정됩니다이 경우 1로 같다고 가정하자 함수의이 부분은 계속 반복 될 것입니다. 또한

이의 midpoint의 계산

else if (value > values[midpoint]){ 
    midpoint = (((midpoint+1) + (n-1))/2); 
           ^^^^^ 
    } 

if 문이 잘못되었습니다.

+0

감사합니다. 이제, 이것은 내가 알아 차린 것입니다. 그러나 문제를 해결하는 방법을 이해하는 데 여전히 어려움을 겪고 있습니다. while 루프 조건을 n> 1로 설정하면 문제를 해결할 수 있지만 적절한 조건을 설정하지 않은 것입니까? –

+0

@JamesKwonLee이 질문을 닫고 새로 업데이트 된 코드를 상대해야하기 때문에 새로운 질문을해야합니다. –