我试图对一组int进行排序,偶数是数字,然后是奇数。
说我有Array[10]={2,4,3,11,0,12,88,99,111,-15}
。
我希望它最终像这样:0, 2, 4, 12, 88, -15, 3, 11, 99, 111
for(i = 0 ; i < 10 ; i++) {
for(j = 0 ; j < 10 ; j++) {
if(Array[i] % 2 != 0) {
Array[j] = Array[i];
}
}
}
我输了。我不知道如何继续这样做。
答案 0 :(得分:1)
采用任何排序算法但使用特殊比较:偶数应视为小于奇数,如果两个数具有相同的奇偶校验,则使用标准比较。类似的东西:
lessthan(a,b):
if (a%2==b%2) // same parity
return a<b // then is a < b ?
else
return a%2==0 // else, is a even ?
答案 1 :(得分:0)
以下是使用标准库函数 qsort 的解决方案。希望这会有所帮助。
#include <stdio.h>
#include <stdlib.h>
#define LEN(arr) (sizeof (arr) / sizeof (arr)[0])
static int Odd(int n)
{
return n % 2 != 0;
}
static int Order(const void *xPtr, const void *yPtr)
{
int x, y, result;
x = *((int *) xPtr);
y = *((int *) yPtr);
if (! Odd(x) && Odd(y)) {
result = -1;
} else if (Odd(x) && ! Odd(y)) {
result = 1;
} else if (x < y) {
result = -1;
} else if (x > y) {
result = 1;
} else {
result = 0;
}
return result;
}
int main(void)
{
int a[] = {2, 4, 3, 11, 0, 12, 88, 99, 111, -15};
int i;
qsort(a, LEN(a), sizeof a[0], Order);
for (i = 0; i < LEN(a); i++) {
printf("%d\n", a[i]);
}
return 0;
}
答案 2 :(得分:-1)
首先将数字分成奇数和偶数。你现在有两个数组。对它们进行排序,它们将两个数组重新组合成一个。
jQuery.ajax({
type: "GET",
url: 'https://maps.googleapis.com/maps/api/geocode/json',
dataType : 'JSON',
data : {
'origins': streetOne+", "+city+", "+province,
},
success: function(output) {
console.log('output: '+JSON.stringify(output));
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert("Please refresh the page. There was an error: " + errorThrown);
},
timeout: 60000
});
jQuery.ajax({
type: "GET",
url: 'https://maps.googleapis.com/maps/api/distancematrix/json',
dataType : 'JSON',
data : {
'origins': origin,
'destinations': destination
},
success: function(output) {
console.log('output: '+JSON.stringify(output));
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert("Please refresh the page. There was an error: " + errorThrown);
},
timeout: 60000
});
答案 3 :(得分:-1)
您可以使用C的标准qsort
函数,但提供自定义比较器[间接基于Jean-Baptiste的答案]:
int evenoddsort(const void *a, const void *b) {
int ai = *(const int *)a;
int bi = *(const int *)b;
int ar = abs(ai % 2);
int br = abs(bi % 2);
if (ar != br) {
return ar - br; /* even is "less than" odd */
} else {
return (ai < bi) ? -1 : (ai > bi) ? 1 : 0;
}
}
用法:
qsort(Array, 10, sizeof(int), evenoddsort);