C++ 关于我在C+中的排序算法的问题+;

C++ 关于我在C+中的排序算法的问题+;,c++,algorithm,quicksort,C++,Algorithm,Quicksort,我有以下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); qsort

我有以下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;
}
#包括
使用名称空间std;
无效qsort5(整数a[],整数n){
int i;
int j;
if(n c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203):请参阅“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13):错误C2780:“void std::swap(std::pair&,std::pair&”):需要2个参数-提供3个参数
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(76):请参阅“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13):错误C2780:“void std::swap(_Ty&,_Ty&)”:需要2个参数-提供3个参数
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(16):请参见“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5.cpp(14):错误C2780:“void std::swap(std::basic_string&,std::basic_string&”):需要2个参数-提供3个参数
1> c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203):请参阅“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14):错误C2780:“void std::swap(std::pair&,std::pair&”):需要2个参数-提供3个参数
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(76):请参阅“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14):错误C2780:'void std::swap(_Ty&,_Ty&)':需要2个参数-提供3个参数
1> c:\program files\microsoft visual studio 9.0\vc\include\utility(16):请参见“std::swap”的声明
1> c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(16):错误C2661:“qsort”:没有重载函数接受2个参数
1> 生成日志保存在“file://c:\Users\dato\Documents\visualstudio 2008\Projects\qsort5\qsort5\Debug\BuildLog.htm”中

请帮助在使用
swap
之前,您必须声明您的版本。由于编译器没有看到声明,因此它使用了在
std
命名空间中找到的声明。此外,您还错贴了
qsort5
(省略了函数最后一行中的5)。同样,编译器找到了具有该名称的函数(但签名不同)在
std
中,并被投诉

您应该将
swap
的整个定义移动到函数
qsort5
之前的位置,或者插入声明

void swap(int i,int j,int a[]);

qsort5

之前,您必须在使用
swap
之前声明您的版本。由于编译器没有看到声明,因此它使用了在
std
命名空间中找到的声明。此外,您还错误地拼写了
qsort5
(忽略函数最后一行中的5).同样,编译器在
std
中找到了一个具有该名称(但签名不同)的函数,并对此进行了投诉

您应该将
swap
的整个定义移动到函数
qsort5
之前的位置,或者插入声明

void swap(int i,int j,int a[]);
qsort5
之前,您希望调用swap(int,int,int)函数。但是,如果查看错误,它会提到“void std::swap(…)”。这是因为您使用的是
名称空间std
,并且您的swap函数在qsort5下面声明

因此,它寻找一个交换函数,只能看到std:swap。尝试将交换函数置于qsort5之上,以便它也能看到该函数。

您希望调用您的交换(int,int,int)函数。但是,如果查看错误,它会提到“void std::swap(…)'这是因为您正在使用命名空间std
,并且您的交换函数在qsort5下面声明


所以它寻找一个交换函数,只能看到std:swap。试着把你的交换函数放在qsort5上面,这样它也能看到那个。不要使用
名称空间std;
,这通常是不好的做法。这会将std::swap引入范围,所以编译器会选择那个交换,而不是你的交换(因为你的交换目前还没有定义)


在使用交换之前先移动它的定义。

不要使用
名称空间std;
,这通常是不好的做法。这会将std::swap引入范围,所以编译器会选择该交换,而不是您的交换(因为此时您的交换尚未定义)


在使用前移动交换的定义。

交换
std
中的一个函数,它必须包含在
中。当您尝试调用
交换
时,它找不到它(我马上解释),而是查看
std::sort
,它包含两个参数(因此出现第一个错误)

它找不到您的
swap
的原因是,它是在调用后声明的。您需要将
swap
的定义移到
qsort5
的定义之上,或者向前声明它:

void swap(int i,int j,int a[]);

void qsort5(int a[],int n){ 
  ...

这告诉编译器您的swap函数存在,当您使用3个参数调用
swap
时,它将使用该函数。

swap
std
中的一个函数,它必须包含在
中。当您尝试调用
swap
时,它找不到它(我马上解释)而是查看
std::sort
,它接受两个参数(因此出现第一个错误)

它找不到您的
swap
的原因是,它是在调用后声明的。您需要将
swap
的定义移到
qsort5
的定义之上,或者向前声明它:

void swap(int i,int j,int a[]);

void qsort5(int a[],int n){ 
  ...

这会告诉编译器您的swap函数存在,当您使用3个参数调用
swap
时,它将使用该函数。

看起来您缺少一个大括号:

for (i=1;i<n;i++)
    j=0;

否则,将缺少一组大括号或其他内容。

看起来您缺少一个大括号:

for (i=1;i<n;i++)
    j=0;
否则就会缺少一组大括号之类的东西