私は奇妙なクイックソートを解決しようとしています。私は配列を分割し、2つの他の配列を作成します:左の配列と右の配列(ピボットなし)と私はそれらを分割します。私のコードは次のとおりです:QuickSort、参照渡し、再帰
#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;
}
コードは完全ではありませんが、ここでは実行する必要があります。
エラー(標準エラー出力)と呼ば中止:
ソリューション:malloc.c:2372:sysmalloc:アサーション(old_top ==(((mbinptr)(((char型*)私はこのエラーを持っています& & old_size == 0)|| &((av) - >ビン[((1)-1)* 2])) - __builtin_offsetof(struct malloc_chunk、fd))) ((2 *(sizeof(size_t))) - ))&〜((2 *(sizeof(size_t))) (size_tの))) - 1)))& &((old_top) - >サイズ&は0x1)& &((unsigned long型)old_end & pagemask)== 0)」私はそれがあるためだと思う
をfailed.`私は再帰的にベクトルvec1とベクトルvec2の参照を取る関数quickSortを呼び出しています。そして、関数vec1とvec2に再びベクトルを作成します...しかし、私は全くわかりません!!
ような長い質問には再び申し訳ありませんが、それを書くのは簡単ではありません...あなたの答えを事前に
感謝!!!!
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低でも、あなたはあなたが行った観察と一緒に、[編集]あなたの質問あなたの問題を再現[、最小完全、かつ検証](http://stackoverflow.com/help/mcve)の例を含むようにする必要があります\しますデバッガ。 –
['#include'](http://stackoverflow.com/questions/31816095/why-should-i-not-include-bits-stdc-h)誰があなたに教えてくれましたか? –
コードをまったくコンパイルできますか?これが実際にコンパイラメッセージであれば、コンパイラは十分なメモリを割り当てることができないようです。 –