Arrays qsort-won';t对整数数组进行排序
这是我的代码:Arrays qsort-won';t对整数数组进行排序,arrays,c,qsort,Arrays,C,Qsort,这是我的代码: #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 }; qso
#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]);
}
}
#包括
#包括
#包括
内部组件(常数无效*a,常数无效*b)
{
int*s1=(int*)a;
int*s2=(int*)b;
返回(s1-s2);
}
int main(){
inta[]={1,2,5,3};
qsort(a,4,sizeof(a),comp);
对于(int i=0;i
我正在使用qsort()
对数组进行升序排序,但不幸的是,什么也没有发生。数组元素保持在相同的位置。每当调用comp()
函数时,我都尝试打印消息,并且调用正确。问题是,元素没有改变
可能是什么问题?您正在减去指针,而不是整数。使用指针获取实际值 这可能意味着按照您所说的执行
return(*s1-*s2)
。然而,正如Eugene Sh.提到的,这可能会溢出int
。因此,比较*s1
和*s2
并相应地返回1
、-1
或0
。Weather Vane还提到您传递了错误的大小值。您应该将元素的数量和每个元素的大小分别传递给第2个和第3个参数。
所以qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),comp代码>
#包括
#包括
#包括
内部组件(常数无效*a,常数无效*b)
{
int*s1=(int*)a;
int*s2=(int*)b;
如果(*s1>*s2){
返回1;
}
否则如果(*s1==*s2){
返回0;
}
否则{
返回-1;
}
}
int main(){
inta[]={1,2,5,3};
qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),comp;
对于(inti=0;i您正在减去指针,而不是整数。请根据指针来获得实际值
这可能意味着执行return(*s1-*s2)
正如您所说。然而,正如Eugene Sh.所提到的,这可能会溢出int
。因此,相反,比较*s1
和*s2
,并相应地返回1
,-1
,或者,0
。气象风向标还提到您传递了错误的大小值。您应该传递元素的数量和e的大小每个元素分别对应于第二个和第三个参数。
所以qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),comp);
#包括
#包括
#包括
内部组件(常数无效*a,常数无效*b)
{
int*s1=(int*)a;
int*s2=(int*)b;
如果(*s1>*s2){
返回1;
}
否则如果(*s1==*s2){
返回0;
}
否则{
返回-1;
}
}
int main(){
inta[]={1,2,5,3};
qsort(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),comp;
对于(int i=0;i您正在减去指针,而不是整数。请尊重指针以获得实际值。它将很好地按内存中的位置对它们进行排序:)哦,好吧,它们已经按此排序了…@christophemore您的意思是return(*s1-*s2)
?顺便说一下,这是一个危险的函数。它可能会溢出int
。您最好使用比较并根据它返回+/-1
或0
。qsort()
参数sizeof(a)
也是错误的,它应该是sizeof a[0]
(每个元素的大小)。您正在减去指针,而不是整数。请尊重指针以获得实际值。它将很好地按内存中的位置对它们进行排序:)哦,好吧,它们已经按此排序了…@Christophermore您的意思是return(*s1-*s2)
?顺便说一句,这是一个危险的函数。它可能溢出int
。您最好使用比较并根据它返回+/-1
或0
。qsort()
参数sizeof(a)
也是错误的,它应该是sizeof a[0]
(每个元素的大小)。次要:代码可能会丢失一些()
:sizeof(a)/sizeof(a[0])
-->sizeof a/sizeof a[0]
和int i=0
更好,因为size\t i=0
次要:代码可能会掉落一些()
:sizeof(a)/sizeof(a[0])
#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]);
}
}