2016-12-15 2 views
-2
void swap(Person* a, int i, int j) { 
    Person b; 
    b = a[i]; 
    a[i] = a[j]; 
    a[j] = b; 
} 


void quicksort(Person* a, int left, int right, PersonComparator cmp) { 
    if (left >= right) return; // 0 or 1 elements, recursion end 
    swap(a, left, (left + right)/2); // move pivot element to left 
    int j = left; 
    for (int i = left + 1; i <= right; i++) { 
     if (i < left) { 
      swap(a, ++j, i); 
    } 
    // assert: v[i] < v[left] for i = left+1..j 
} 
swap(a, left, j); // move back pivot element 
quicksort(a, left, j-1, cmp); // assert: v[i] < v[j] for i = left..j-1 
quicksort(a, j+1, right, cmp); // assert: v[i] >= v[j] for i = j+1..right 
} 

어떻게 든이 "cmp"를 거기에서 가져야 만하지만 어디서 어떻게해야할지 모르겠다. Person *은 struct Person btw에 대한 포인터입니다.왜이 빠른 기능이 작동하지 않습니까?

+0

StackOverflow가 숙제 질문을 덤프 할 장소가 아닙니다. – recurf

+0

괜찮습니까, 숙제를 벙벙 할 수있는 곳을 알고 계십니까? – NoIdea

답변

0

디버거를 사용해야합니다. 그것 없이는, 당신은 길을 잃게됩니다. 디버거로 코드를 실행하고 코드가 기대하지 않는 부분을 확인하십시오.

나는이 라인을한다고 가정

for (int i = left + 1; i <= right; i++) { 
    if (i < left) { 

당신이 무엇을 기대하지 않습니다. "왜 이것이 작동하지 않을까?"라는 질문과 더 비슷하게 보입니다. 왜 "작동하지 않는가"가 아닙니다. 특히 당신이 비교기를 전혀 사용하지 않는 것 같기 때문에.

+0

답변 해 주셔서 감사합니다. 나는 지금 디버거를 사용해야한다고 생각하지 않는다. 나는 코드가 작동하지 않는다는 것을 알고 있으며, 내 질문에서 지적한 것처럼 비교기를 전혀 사용하지 않았다는 것을 알고있다. 나는 그곳에 그것을 어떻게 구축 할 것인지 전혀 모른다. 나는 프로그래밍에 너무 어리 석다 고 생각한다. – NoIdea

관련 문제