Ich versuche, eine Art von seltsamen QuickSort zu lösen. Ich partitioniere das Array und ich erstelle 2 andere Arrays: das linke Array und das rechte Array (ohne den Pivot) und ich partitioniere sie und so weiter. Mein Code ist dies:QuickSort, Pass-by-Referenz, Rekursion
#include <bits/stdc++.h>
using namespace std;
int partition(vector<int>& ar) {
int pivot=ar[0];
int store=0;
for(int i=0;i<ar.size();i++)
{
if(ar[i]<pivot)
{
store++;
int temp=ar[store];
ar[store]=ar[i];
ar[i]=temp;
}
}
for(int i=0;i<store;i++){
int temp=ar[i];
ar[i]=ar[i+1];
ar[i+1]=temp;
}
for(int i=ar.size()-2;i>store;i--){
int temp=ar[i+1];
ar[i+1]=ar[i];
ar[i]=temp;
}
return store; }
void quickSort(vector <int>& arr) {
if(arr.size()<=1)
{
return;
}
int a=partition(arr);
vector <int> vec1(a);
int b=arr.size()-a-1;
vector <int> vec2(b);
for(int i=0;i<a;i++)
{
vec1[i]=arr[i];
}
for(int i=a+1;i<arr.size();i++)
{
vec2[i]=arr[i];
}
if(vec1.size()<2 && vec2.size()<2)
{
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
return;
}
else{
quickSort(vec1);
quickSort(vec2);
}
}
int main() {
int n;
cin >> n;
vector <int> arr(n);
for(int i = 0; i < (int)n; ++i) {
cin >> arr[i];
}
quickSort(arr);
for(int i =0; i <arr.size(); i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
Der Code wird überhaupt nicht fertig, aber hier sollte es laufen, während es nicht der Fall ist. Ich habe diesen Fehler:
Abort Called
Fehler (stderr):
Lösung: malloc.c: 2372: SysMalloc: Assertion (old_top == (((mbinptr) (((char *) & ((av) -> Bins [((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) & & old_size == 0) || ((vorzeichenlos lang) (old_size)> = (vorzeichenlos lang) (((__ builtin_offsetof (struct malloc_chunk, fd_nextsize)) + ((2 * (sizeof (size_t))) - 1)) & ~ ((2 * (sizeof (size_t))) - 1))) & & ((old_top) -> Größe & 0x1) & & ((unsigned long) old_end & pagemask) == 0)‘failed.`
ich denke, es liegt daran, Ich rufe rekursiv die Funktion quickSort auf, die die Referenz von Vektor vec1 und Vektor vec2 nimmt, und dann erstelle ich in der Funktion wieder Vektor vec1 und vec2 ... Aber ich bin überhaupt nicht sicher !!
Leider wieder für eine so lange Frage, aber es ist es nicht einfach zu schreiben ...
Vielen Dank im Voraus für Ihre Antworten !!!!
Das richtige Tool, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –
['#include'] (http://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h) Wer hat dir das beigebracht? –
Können Sie überhaupt einen Code kompilieren? Wenn dies tatsächlich eine Compiler-Nachricht ist, scheint der Compiler nicht genügend Speicher zuzuweisen. –