配列の偶数だけをソートするために、qsort()
関数を使用しようとしています(オッズはその位置に残ります)。例えばqsort():配列の偶数のみをソートする
私が配列している場合:1はなるだろうソート後
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;
}
これは、 'qsort'のような一般的な比較ベースのソートでは考えられません。 – melpomene
copy => sort => writeback – BLUEPIXY
'6 5 4 3 2 1'はどのようにソートされると思いますか? '2 4 6 5 3 1'または' 2 5 4 3 6 1'?つまり、配列内のすべての奇数が同じインデックスになければなりませんか?または、彼らはお互いに同じ相対的なソートが必要なだけですか? – Schwern