2015-05-20 3 views
0

Я думаю, мне удалось сопоставить сравнения, но я пытаюсь выяснить, как я могу подсчитать количество свопов. У меня проблема со значением swapcounter и рекурсией. Есть идеи?Свопы и сравнения в Quicksort

int quicksort (int nums[],int n,int left,int right){//quicksort takes an array, the leftmost index and the rightmost index 

    int swapCounter=0; 
    int i=left,j=right,temp; 
    int comparisonCounter = 0; 
    int pivot = nums[(left + right)/2]; 
/* partition */ 
    while(i<=j){ 
    comparisonCounter++; 
     while(nums[i]<=pivot) 
      i++; 
     while(nums[j]>pivot) 
      j--; 
     if(i<=j){ 
      temp=nums[i]; 
      nums[i]=nums[j]; 
      nums[j]=temp; 
      i++; 
      j--; 
      swapCounter++; 
     } 
    } 

    /* recursion */ 
    if (left < j) 
     comparisonCounter+=quicksort(nums,n, left, j); 
    if (i < right) 
     comparisonCounter+=quicksort(nums,n, i, right); 

    printf("\nSwaps=%d\n",swapCounter); 
    return comparisonCounter; 
    } 

ответ

1

Вы можете:

  • Сделать swapcounter глобальным.
  • Сделать функцию указателем на переменную.
  • Сделать функцию вызовом другой функции для подсчета, тем самым поддерживая проблему счетчика Someone Else.
Смежные вопросы