【发布时间】:2017-10-26 07:39:41
【问题描述】:
我有一个列表 int A[size] 和一个列表 maxA[size],它应该包含按 A 的值排序的 A[size] 的索引。基本上 A[maxA[0]] 应该是A 中最大的 int,maxA[0] 是它的索引。
这是我的比较函数:
int compareA(const void *a,const void *b){
return A[*(TYPE *)b] - A[*(TYPE *)a];
}
我用
来称呼它qsort(maxA,SIZE_L,sizeof(int),compareA);
我有一个循环,将元素的值增加一个随机正数,当 A[i] > L (L 由结尾列表定义并且它是随机的)然后:
A[maxA[i]] = INT_MIN;
然后停止增加它 一段时间后它停止工作。这是我的输出:
INDEX VALUE
1 320
2 207
8 -437
3 -681
4 -960
6 -1638
5 -2928
9 -7395
7 -19272
0 -2147483648
Removed: 1
6 -1560 500
5 -2684 1000
9 -7140 1066
7 -18396 1168
1 -2147483648
0 -2147483648
2 276
3 0
8 -418
4 -864
为什么我会出现这种随机行为;
【问题讨论】:
-
不要描述您的代码(“我有一个列表...”),而是尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们。
-
小心你的术语。你有两个数组。列表有“链表”的内涵,这是完全不同的。
-
您可能想查找
qsort_r(),但要注意:它是非标准的,不同的平台实现了不同(完全不兼容)的同名接口。 -
输出显示“removed: 1”,是否从 A[] 和 maxA[] 中删除了一个值?如果是这样,你又调用了 qsort,你还在用 SIZE_L 作为参数吗?