2015-05-20 38 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全球。
  • 使函數獲取指向變量的指針。
  • 使函數調用另一個函數來進行計數,從而使計數器狀態保持其他人的問題。