C++ 实现计数排序

C++ 实现计数排序,c++,sorting,C++,Sorting,这是计数排序的代码 #include <iostream> using namespace std; int main(){ int a[]={2,3,1,2,3}; int n=sizeof(int)/sizeof(int); int max=a[0]; for (int i=1;i<n;i++) { if (a[i]>max) { max=a[i]; } }

这是计数排序的代码

#include <iostream>
using namespace std;

int main(){
    int a[]={2,3,1,2,3};
    int n=sizeof(int)/sizeof(int);
    int max=a[0];
    for (int i=1;i<n;i++) {
        if (a[i]>max) { 
            max=a[i];
        }
    }

    int *output=new int[n];
    for (int i=0;i<n;i++) {
        output[i]=0;
    }
    int *temp=new int[max+1];
    for (int i=0;i<max+1;i++) {
        temp[i]=0;
    }
    for (int i=0;i<n;i++){
        temp[a[i]]=temp[a[i]]+1;
    }
    for (int i=1;i<max+1;i++) {
        temp[i]=temp[i]+temp[i-1];
    }
    for (int  i=n-1;i>=0;i--) {
        output[temp[a[i]]-1]=a[i];
        temp[a[i]]=temp[a[i]]-1;
    }
    for (int i=0;i<n;i++) {
        cout<<output[i]<<"  ";
    }
    return 0;
}
#包括
使用名称空间std;
int main(){
int a[]={2,3,1,2,3};
int n=sizeof(int)/sizeof(int);
int max=a[0];
对于(inti=1;imax){
max=a[i];
}
}
int*输出=新的int[n];
对于(int i=0;i
错误。这只是将
1
分配给
n

你是说

int n=sizeof(a)/sizeof(int);
我没有超越这一点。毫无疑问还有更多的问题,但这是最重要的

这是使用调试器可以很容易地解决的问题

错误。这只是将
1
分配给
n

你是说

int n=sizeof(a)/sizeof(int);
我没有超越这一点。毫无疑问还有更多的问题,但这是最重要的


这是一种使用调试器可以很容易地解决的问题。

看看这个表达式:

int n=sizeof(int)/sizeof(int);
您认为
n
的值在这之后是多少?(1)
这是合适的值吗?(不,值应该是5)

这是否解释了您看到的输出?(是的,这解释了为什么只显示一个数字)

看看这个表达式:

int n=sizeof(int)/sizeof(int);
您认为
n
的值在这之后是多少?(1)
这是合适的值吗?(不,值应该是5)

这是否解释了您看到的输出?(是的,这解释了为什么只显示一个数字)我的建议是,如果你要在C++中这样做,你实际上会尝试使用C++中的可用的东西。我会查阅<代码> STD::Max元素> /Cord>,查找输入中最大的元素,使用<代码> STD::vector < /C> >而不是直接分配动态分配。< /P>

当你想要C++中数组中元素的数量时,你可以考虑一个函数模板:

template <class T, size_t N>
size_t num_elements(T const (&x)[N]) { 
    return N;
}

<>我的建议是,如果你要在C++中这样做,你实际上会尝试使用C++中的可用的东西。我会查阅<代码> STD::Max元素> /Cord>,查找输入中最大的元素,使用<代码> STD::vector < /C> >而不是直接分配动态分配。< /P>

当你想要C++中数组中元素的数量时,你可以考虑一个函数模板:

template <class T, size_t N>
size_t num_elements(T const (&x)[N]) { 
    return N;
}

太乱了。我为你格式化了代码。为什么不在退出时删除数组?
int n=sizeof(int)/sizeof(int);
应该是
int n=sizeof(a)/sizeof(*a);
太乱了。我为你格式化了代码。为什么不在退出时删除数组?
int n=sizeof(int)/sizeof(int);
应该是
int n=sizeof(a)/sizeof(*a)
…或者甚至有一些合理的打印语句。@Greg它们甚至不需要如此合理地放置!!;-)我认为你应该建议
const
int n=sizeof(a)/sizeof(int)
取而代之的是:)让我们学会安全,直到我们知道如何避免混乱(哦,无论如何要保持好习惯,并从全面优化中获益)。它不必分析50行紧凑的代码,以查看是否有东西意外写入了n…,或者甚至是使用了一些放置合理的打印语句。@Greg它们甚至不需要如此明智地放置!!;-)我认为你应该建议
const
intn=sizeof(a)/sizeof(int)
取而代之:)让我们学会安全,直到我们知道如何避免混乱(哦,然后保持好习惯并从全面优化中获益)。它不用分析50行紧凑的代码来查看是否有东西意外地写入了n.@user466534,更令人担心的是您自己无法调试它。这表示您没有在调试器中单步执行代码,并且找不到可以引导您找到正确答案的问题和答案。每个人都会打字。好的程序员有诊断打字错误的技能。不,首先你是对的,好的程序员有诊断打字错误的技能,只是我很累,想不出这么简单的错误,但是谢谢你advice@user466534,更令人担心的是,您自己无法调试它。这表示您没有在调试器中单步执行代码,并且找不到可以引导您找到正确答案的问题和答案。每个人都会打字。好的程序员有诊断打字错误的技能。不,首先你是对的,好的程序员有诊断打字错误的技能,只是我很累,想不出这么简单的错误,但是谢谢你的建议