私はハッカーにとって簡単なソート2の課題を解決しようとしていました。配列全体がソートされるまで、繰り返しパーティションを呼び出さなければならないと言っていました。私のプログラムはいくつかのテストケースで動作しますが、いくつかのケースでは "Quick Sort - 2.exeが動作を停止しました"というクラッシュが発生します。なぜそれが起こっているのかについての理由を見つけることができませんでした。 アレイ/サブアレイの最初の要素は、毎回ピボット要素として扱われます。クイックソートプログラムが動作を停止しました
#include <iostream>
#include <conio.h>
using namespace std;
void swap(int arr[], int a, int b)
{
int c = arr[a];
arr[a] = arr[b];
arr[b] = c;
}
void qsort(int arr[], int m, int n) //m - lower limit, n - upper limit
{
if (n - m == 1)
{
return;
}
int p = arr[m], i, j, t; //p - pivot element, t - temporary
//partition
for (int i = m+1; i < n; i++)
{
j = i;
if (arr[j] < p)
{
t = arr[j];
while (arr[j] != p)
{
arr[j] = arr[j-1];
j--;
}
arr[j] = t; //pivot is at j and j+1
}
}
//check if sorted
int f = 1;
while (arr[f] > arr[f-1])
{
if (f == n-1)
{
f = -1;
break;
}
f++;
}
if (f == -1)
{
cout << "Sub Array Sorted\n";
}
else
{
if (p == arr[m]) //pivot is the smallest in sub array
{
qsort(arr, m+1, n); //sort right sub array
}
else
{
qsort(arr, m, j+1); //sort left sub array
qsort(arr, j+1, n); //sort right sub array
}
}
}
int main()
{
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
qsort(arr, 0, n);
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
return 0;
}
クラッシュするサンプル入力がありますか? – BoBTFish
動作するケースと動作しないケースを表示してください。 –
あなたが経験している "クラッシュ"は、影響のポイントがおそらくすぐに明らかになる*デバッガー*の下での実行のための証言になるでしょう。 – WhozCraig