Cの私のソートアルゴリズムについての質問++
質問
私はC ++のコードを次している。
#include <iostream>
using namespace std;
void qsort5(int a[],int n){
int i;
int j;
if (n<=1)
return;
for (i=1;i<n;i++)
j=0;
if (a[i]<a[0])
swap(++j,i,a);
swap(0,j,a);
qsort5(a,j);
qsort(a+j+1,n-j-1);
}
int main()
{
return 0;
}
void swap(int i,int j,int a[])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
私は問題を抱えている。
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(76) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(_Ty &,_Ty &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(16) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(76) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(_Ty &,_Ty &)' : expects 2 arguments - 3 provided
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(16) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(16) : error C2661: 'qsort' : no overloaded function takes 2 arguments
1>Build log was saved at "file://c:\Users\dato\Documents\Visual Studio 2008\Projects\qsort5\qsort5\Debug\BuildLog.htm"
助けてください。
解決
swap
はstd
によって含まれていなければならない<iostream>
関数です。あなたはswap
への呼び出しを行うためにしようとすると、それはそれを見つける(私は一瞬で説明します)、代わりに二つの引数を取るstd::sort
、(それゆえ、最初のエラー)を見ることができません。
それはあなたのswap
を見つけることができない理由があります。あなたはそれを宣言いずれか前方swap
の上ごqsort5
の定義を移動したりする必要があります:
void swap(int i,int j,int a[]);
void qsort5(int a[],int n){
...
それはあなたのスワップ機能が存在し、あなたは3つの引数を持つswap
を呼び出すとき、それはそれを使用することをコンパイラに指示します。
他のヒント
あなたは、あなたがそれを使用する前にswap
のバージョンを宣言する必要があります。コンパイラは、宣言を見ていないので、それがstd
名前空間で見つかったものを使用しました。また、あなたは(関数の最後の行に5を省略)qsort5
をmispelled。再び、コンパイラはstd
でその名前の関数(ただし、異なるシグネチャ)を発見し、訴えた。
あなたはどちらかの機能swap
前の位置にqsort5
の定義全体を移動または宣言を挿入する必要があります。
void swap(int i,int j,int a[]);
qsort5
前に
using namespace std;
を使用していない、一般的に悪い習慣です。 (あなたがすべてのこの時点では定義されていないので)、これはむしろあなたよりも、そのスワップまでスコープにはstd ::スワップので、コンパイラピックをもたらします。
あなたのスワップの移動の定義を使用する前に。
あなたのようなルックスは、ブレースが欠落している。
for (i=1;i<n;i++)
j=0;
は、上記ループにおいて、j
は時間の全体の束をゼロに設定されます。これはに(自分でコンパイラによるであろう)に簡略化することができます:
j = 0;
それ以外の場合は、中括弧または何か他の行方不明のセットがあります。
は、あなたがstd::sort
を使用して代わりに車輪の再発明と考えがありますか? qsort5
機能を除去することができるので、その後、あなたのエラーが表示されなくなります。
あなたは呼び出されるスワップ(int型、int型、int型)機能を期待しています。あなたがエラーを見ればしかし、それは、ボイドのstd ::スワップ(...) "に言及します。これは、あなたがusing namespace std
あるためであり、あなたのスワップ機能はqsort5の下に宣言されます。
。それは同様にその1を見ることができるようにqsort5の上ごスワップ機能を入れてみてください。
あなたはおそらく最後にqsort5呼び出すするつもり、とのqsort代わりに電話した?