Ich habe versucht, die schnelle Sortierung - 2 Herausforderung auf hackerrank zu lösen. Es hieß, dass wir die Partition immer wieder aufrufen mussten, bis das gesamte Array sortiert war. Mein Programm funktioniert für einige Testfälle, aber für einige stürzt es ab, "Quick Sort - 2.exe funktioniert nicht mehr". Ich konnte den Grund nicht finden, warum es passiert. Das erste Element des Arrays/Sub-Arrays sollte jedes Mal als Pivot-Element genommen werden.Quick Sort Programm funktioniert nicht mehr
#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;
}
Haben Sie mindestens eine Beispieleingabe, auf der es abstürzt? – BoBTFish
Bitte zeigen Sie einen Fall, der funktioniert und einen Fall, der nicht funktioniert. –
Dieser "Absturz", den Sie erleben, wäre ein Zeugnis dafür, dass Sie unter einem * Debugger * laufen, wo der Angriffspunkt wahrscheinlich sofort offensichtlich wird. – WhozCraig