我正試圖解決hackerrank上的快速排序 - 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
請顯示可行的案例和不起作用的案例。 –
您遇到的「崩潰」將是在* debugger *下運行的證明,其影響點可能幾乎立即變得明顯。 – WhozCraig