这里是计数排序的代码
#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;
}
但输出只有2,只有一个数字。怎么了我不明白请大家帮帮我
最佳答案
int n=sizeof(int)/sizeof(int);
错了。这只是将 1
分配给 n
。
你的意思是
int n=sizeof(a)/sizeof(int);
我没有看得更远。毫无疑问还有更多问题,但这是最重要的。
这是您可以使用调试器轻松解决的问题。
关于c++ - 实现计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628562/