これは私には起こりませんでした。単に "Quick.exeの0x003714e9で処理されない例外:0xC00000FD:スタックオーバーフロー"と表示されます。ブラケットをハイライト表示し、その横に矢印が表示され、そこにエラーがあることがわかります。 P.P.Quick.exeの0x003714e9でハンドルされない例外:0xC00000FD:スタックオーバーフロー
if(cut>1)
{
quickSort(data, left, right);
}
あなたは右/左の間で何度も何度も機能を呼び出している:ブラケットは大胆
#include<iostream>
using namespace std;
int partition(int data[], int left, int right)
**{**
int pivot = data[left];
while(true)
{
while(data[left] < pivot)
{
left++;
}
while (data[right]>pivot)
{
//find smaller value than pivot from top array
right--;
}
if(left < right)
{
//change pivot place
int temp = data[right];
data[right] = data[left];
data[left] = temp;
}
else
{
return right;
}
}
}
void quickSort (int *data, int left, int right)
{
if(left<right)
{
int cut = partition(data, left, right);
if(cut>1)
{
quickSort(data, left, right);
}
if(cut+1<right)
{
quickSort(data, cut+1, right);
}
}
}
void quickSort(int *data, int length)
{
quickSort(data, length-length, length-1);
}
void print_array(int array[], int size) //this function is to print the array after we finish sorting and we can use it before the sorting begin
{
int j;
for (j=0; j<size; j++)
cout <<" "<< array[j]<<endl;
}//end of print_array
int main()
{
const int size = 5;
int arr[size]= {1, 17, 4, 6, 20};
quickSort(arr, 0, size);
print_array(arr, size);
system("pause");
return 0;
}
ほとんど制御されない再帰です。あなたのベースケースがサウンドであることを確認してください – stackptr
私はすべてをチェックしましたが、エラーは見られません。私のコードは完璧ではありませんが、今は盲目です:P – magician
Visual StudioでTracepointを挿入し、 "Printあなたのクイックソート機能で '{$ CALLSTACK} 'と入力してください。実行が遅くなりますが、出力ウィンドウで呼び出しのログを取得します。 – sergiol