0

再帰的なクイックソート機能が機能しない理由がわかりません。

元の関数呼び出しは次のとおりです。

qSort(quickArr,0,inCount-1,&qSwapCount); 

ここで、inCount-1 は最後の配列要素の位置です

再帰的なクイックソート関数は次のとおりです。

void qSort(int *qArr, int left, int right, int *qCount)
{
  if(left<right)
    {
      int pivotIndex=(left+right)/2;
      int pivot=partition(qArr, left, right, pivotIndex, qCount);
      qSort(qArr, left, pivot-1, qCount);
      qSort(qArr, pivot+1,right, qCount);
    }
}

そして、ここにピボット機能があります

int partition(int *qArr, int left, int right, int pivot, int *qCount)
{

  int i;
  int pivotValue=qArr[pivot];
  int index=left;

  swap(&qArr[pivot],&qArr[right]);
  (*qCount)++;

  for(i=left;i<right;i++);
  {
    if (qArr[i]<pivotValue)
      {
    swap(&qArr[i],&qArr[index]);
    (*qCount)++;
    index++;
      }
  }
  swap(&qArr[index],&qArr[right]);
  return index;
}

ソートは、http: //en.wikipedia.org/wiki/Quicksortで提供されている疑似コードに厳密に従って、適切に機能する必要があります 。

ご協力いただきありがとうございます!

私の出力は次のとおりです:190 506 115 471 168 229 851 497 728 549 33 435 214 439 822 500 797 692 44 731 222 613 550 669 556 978 756 402 751 357 102 393 310 959 82 234 119 976 13 709 27 989 375 150 639 65 552 252 542 925 637 273 2 655 827 584 418 163 871 485

明らかにまだソートされていません:-D

4

1 に答える 1

3

ループの最後にセミコロンがありますfor..ループ本体は一度だけ実行されます。

for(i=left;i<right;i++);
于 2013-09-22T21:34:43.060 に答える