排序数组,首先在C中配对数字

时间:2015-11-26 19:52:44

标签: c arrays

我试图对一组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];
    }
  }
}

我输了。我不知道如何继续这样做。

4 个答案:

答案 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);