【发布时间】:2016-04-30 08:37:26
【问题描述】:
我有一个包含整数的文件。
我将这些值逐行读入一个数组。我正在尝试对每一行进行快速排序。在数组值完全停止打印之前,排序似乎是成功的。
我参考了:one website 和 another website 以获得指导,因为我觉得这个问题与我错误地设置了 size_t n_len = sizeof((*array)/sizeof(array)); 有关。
以下仅为相关代码:
int int_cmp(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
while ((p = fgets(line, MAX_LINE_LEN, fp)) != NULL) {
p += strspn(p, " \t\n");
if (*p == '#' || *p == '\0') {
continue;
}
for (count = 0; *p != '\0'; ) {
if (isdigit((unsigned char)*p)) {
array[count++] = strtol(p, &p, 10);
} else {
p += strcspn(p, " \t\n");
}
p += strspn(p, " \t\n");
}
size_t n_len = sizeof((*array)/sizeof(array));
qsort(array, n_len, sizeof(int), int_cmp);
int n;
for (n = 0; n < n_len; n++)
printf("sorted array:%d\n ", array[n]);
}
这是输出:
sorted array:1
sorted array:2
sorted array:3
sorted array:4
sorted array:14
sorted array:14
sorted array:48
sorted array:62
sorted array:1
sorted array:3
sorted array:5
sorted array:7
sorted array:123
sorted array:456
sorted array:789
sorted array:1234
sorted array:34
sorted array:34
sorted array:34
sorted array:34
sorted array:1
sorted array:34
sorted array:34
sorted array:34
sorted array:1
sorted array:2
sorted array:2
sorted array:2
输出应该是:
sorted array:1
sorted array:2
sorted array:3
sorted array:4
sorted array:4
sorted array:5
sorted array:5
sorted array:5
sorted array:6
sorted array:14
sorted array:14
sorted array:48
sorted array:62
sorted array:1
sorted array:3
sorted array:5
sorted array:7
sorted array:9
sorted array:123
sorted array:456
sorted array:789
sorted array:1234
sorted array:5678
sorted array:34
sorted array:34
sorted array:34
sorted array:34
sorted array:1
sorted array:1
sorted array:1
sorted array:2
sorted array:2
sorted array:2
sorted array:2
sorted array:2
sorted array:3
sorted array:3
sorted array:4
sorted array:4
sorted array:4
sorted array:5
sorted array:5
sorted array:6
sorted array:7
sorted array:7
sorted array:7
【问题讨论】:
-
size_t n_len = sizeof((*array)/sizeof(array));这可能无法提供您期望的大小。 -
使用
count而不是n_len -
@BLUEPIXY 谢谢!解决了。如果你想把它作为答案,我会接受。 (:
标签: c algorithm sorting quicksort