qsort 不会对整数数组进行排序
qsort won't sort an array of integers
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int comp (const void *a, const void *b)
{
int *s1 = (int *)a;
int *s2 = (int *)b;
return (s1 - s2);
}
int main() {
int a[] = { 1, 2, 5, 3 };
qsort(a, 4, sizeof(a), comp);
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
printf("%d ", a[i]);
}
}
我正在使用 qsort()
对我的数组进行升序排序,但不幸的是,没有任何反应。数组元素保持在相同的位置。我尝试在调用 comp()
函数时打印消息,并且调用正确。问题是,元素没有改变。
可能是什么问题?
你减去的是指针,而不是整数。引用指针以获取实际值。
这可能意味着按照您所说的 return (*s1 - *s2)
。然而,正如 Eugene Sh.提到,这可能会溢出 int
。因此,而是相应地比较 *s1
和 *s2
和 return 1
、-1
或 0
。 Weather Vane 还提到您传递了错误的尺寸值。您应该将元素的数量和每个元素的大小分别传递给第二个和第三个参数。
所以qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), comp);
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int comp (const void * a, const void * b)
{
int *s1 = (int *)a;
int *s2 = (int *)b;
if(*s1 > *s2) {
return 1;
}
else if(*s1 == *s2) {
return 0;
}
else {
return -1;
}
}
int main() {
int a[] = {1, 2, 5, 3};
qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), comp);
for (int i = 0; i<sizeof(a)/sizeof(a[0]); i++) {
printf("%d ", a[i]);
}
}
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int comp (const void *a, const void *b)
{
int *s1 = (int *)a;
int *s2 = (int *)b;
return (s1 - s2);
}
int main() {
int a[] = { 1, 2, 5, 3 };
qsort(a, 4, sizeof(a), comp);
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
printf("%d ", a[i]);
}
}
我正在使用 qsort()
对我的数组进行升序排序,但不幸的是,没有任何反应。数组元素保持在相同的位置。我尝试在调用 comp()
函数时打印消息,并且调用正确。问题是,元素没有改变。
可能是什么问题?
你减去的是指针,而不是整数。引用指针以获取实际值。
这可能意味着按照您所说的 return (*s1 - *s2)
。然而,正如 Eugene Sh.提到,这可能会溢出 int
。因此,而是相应地比较 *s1
和 *s2
和 return 1
、-1
或 0
。 Weather Vane 还提到您传递了错误的尺寸值。您应该将元素的数量和每个元素的大小分别传递给第二个和第三个参数。
所以qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), comp);
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int comp (const void * a, const void * b)
{
int *s1 = (int *)a;
int *s2 = (int *)b;
if(*s1 > *s2) {
return 1;
}
else if(*s1 == *s2) {
return 0;
}
else {
return -1;
}
}
int main() {
int a[] = {1, 2, 5, 3};
qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), comp);
for (int i = 0; i<sizeof(a)/sizeof(a[0]); i++) {
printf("%d ", a[i]);
}
}