【发布时间】:2018-03-16 04:29:48
【问题描述】:
我正在尝试对整数数组进行排序,以便先按降序打印偶数,然后按升序打印数组中的奇数。
So the output would look like:
8 6 4 2 1 3 5 7 9
我该怎么做呢?
#include <stdio.h>
#include <stdlib.h>
int compare(const void *p, const void *q);
void printArr(int arr[], int n);
//Driver program to test sort
int main()
{
int nums[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(nums) / sizeof(nums[0]);
qsort((void*) nums, size, sizeof(nums[0]), compare);
printf("Sorted array is\n");
printArr(nums, size);
return 0;
}
//This function is used in qsort to decide the relative order of elements at addresses p and q
int compare(const void *p, const void *q)
{
return ( *(int*)p < *(int*)q);
}
//A utility function to print an array
void printArr(int arr[], int n)
{
int i;
for (i = 0; i < n; ++i)
printf("%d ", arr[i]);
}
【问题讨论】:
-
都是比较功能。提示:偶数总是小于奇数。
-
OP 的
compare()不适用于qsort()。qsort()需要-、+或 0 结果,而不是 0,1。 -
您还可以做一件事,将初始数组分成两个临时数组,一个用于排序的偶数,另一个用于排序的奇数。然后将这两个数组合并为一个并以您想要的方式打印它们。
-
您可以搜索以前的问题,可能使用“
[c] sort ascending descending odd even”作为搜索词。重复的奇数和偶数排序略有不同,但基本思想完全相同——以不同的方式处理奇数和偶数值,并将一组排在另一组之前,并且可能在不同的方向上排序。一旦你有了基本的想法,这一切都很简单,下面的答案也很好地概述了。 -
@JonathanLeffler,你的副本是 C++(和一个非常尴尬的 C 答案)授予的主体是相同的,但实现不同。
标签: c