-4
quicksort C++を使用してリストをソートするためのプログラムです。以下のコードはcode :: blocksとhttp://cpp.sh/で正常にコンパイルされましたが、残念ながら要素を入力した後にハングします。クイックソートの実装で何が問題になっていますか?
void quicksort(vector<int> v,int left_index,int right_index)
{
if(left_index>=right_index)
return;
int pivot=(right_index+left_index)/2;
int left=left_index;
int right=right_index;
while(left<=right)
{
while(v[left]<v[pivot])
left++;
while(v[right]>v[pivot])
right--;
if(left<=right)
{
swap(v,left,right);
left++;right--;
}
}
quicksort(v,left_index,right);
quicksort(v,left,right_index);
}
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
[パラメータを参照として渡す](http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/)と値渡しのタイミングについて学ぶ必要があります。参照してくださいhttp://stackoverflow.com/a/3399248/104774 – stefaanv
私はあなたの実装が進歩することが保証されているとは思わない:分割のいずれかが空の場合、再帰がスタックし、オーバーフロースタックまたは永遠に実行されます。 –