【发布时间】:2019-04-28 07:50:04
【问题描述】:
我想修改我的计数排序算法以使用负整数。
这是我目前的情况(分段错误):
void counting_sort(int *vet, int max, int min, int n){
int i, j, C[(max-min)+1], B[n];
for (i=0;i<=max;i++){
C[i]=0;
}
for (i=0;i<n;i++){
C[vet[i]-min]++;
}
for (i=1;i<=(max-min);i++){
C[i]=C[i]+C[i-1];
}
for (i=n-1;i>=0;i--){
B[C[(vet[i])-min]-1]=vet[i];
C[vet[i]-min]--;
}
for (i=0;i<n;i++){
printf("%d ",B[i]);
}
}
【问题讨论】:
-
你用gdb调试过你的代码吗?段错误发生在哪里?
-
这一行似乎是问题所在:B[C[(vet[i])-min]-1]=vet[i];它试图访问大于我认为的向量长度的值
-
使用调试器可以轻松找出!当您逐句执行代码时,您还可以监视和检查所有变量的值,并检查表达式的结果作为索引是否有效。
-
我知道问题出在哪里(它试图访问大于向量长度的值)但真的不知道如何解决它,我在 C++ 中使用相同的逻辑实现了一个代码,它工作正常,但由于某种原因在 c 中不起作用,不幸的是它必须用 c 编写。
-
for (i=0;i<=max;i++){ C[i]=0; }不正确。请发帖minimal reproducible example。
标签: c sorting counting-sort