我试图使用qsort()
函数来排序数组的偶数(赔率保持在他们的位置)。
例如,如果我有数组:
5 122 3 26 48
排序之后会得到:
5 26 3 48 122
我的直觉只是在a
和b
指向的数字都是偶数时进行排序。
这是我的尝试:
#include <stdio.h>
#include <stdlib.h>
int comp_even(const void *a, const void *b) {
int l = *(int *)a;
int r = *(int *)b;
if ( !(l&1) && !(r&1) ) //if both are even, then sort them in ascending order
return (l-r);
return 0;
}
int main() {
int i, n;
int a[1001];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), comp_even);
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
答案 0 :(得分:3)
不幸的是,qsort
并不支持这样的事情;对于任何两个元素,比较函数必须返回三个结果之一:
qsort
不保证哪个元素在另一个元素之前结束)。而且,至关重要的是,该函数必须仅使用其两个参数的值来执行此操作;它不知道它们来自的数组索引。
相反,您可以采用以下两种方法之一:
int[][2]
,它不仅存储数组中的值,还存储其原始索引。然后,您可以对元素进行排序,使得如果任一值为奇数,则具有较小原始索引的元素首先出现。