【发布时间】:2021-01-05 13:42:21
【问题描述】:
我一直在尝试对包含 26 个随机整数输入的数组进行排序,首先对奇数进行排序,然后按升序对偶数进行排序。到目前为止,我尝试的是使用选择排序算法并应用 if 语句。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int arr[26], i, min, j, p;
srand((unsigned)time(NULL));
for (i = 0; i < 26; i++) {
arr[i] = rand() % 100;
}
for (i = 0; i < 26; i++) {
printf("%2d ", i);
}
puts("");
for (i = 0; i < 26; i++) {
printf("%2d ", arr[i]);
}
for (i = 0; i < 26; i++) {
if (arr[i] % 2 != 0) {
min = i;
for (j = i + 1; j < 25; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
p = arr[i];
arr[i] = arr[min];
arr[min] = arr[i];
} else {
min = i;
for (j = i + 1; j < 25; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
p = arr[i];
arr[i] = arr[min];
arr[min] = arr[i];
}
}
puts("");
for (i = 0; i < 26; i++) {
printf("%2d ", arr[i]);
}
return 0;
}
这似乎不是正确的做法,我有点迷茫,因为我是初学者。任何人都可以提供任何提示吗?哦,如果我的代码看起来像垃圾,请道歉。谢谢你的回答
【问题讨论】:
-
我建议您首先对数组进行分区,将奇数放在数组的一端,将偶数放在另一端。然后找出拆分的位置,并使用标准
qsort将它们作为两个不同的数组进行排序。 -
qsort的比较器函数可以很容易地安排,首先它测试两个项目的“均匀性”,如果相同,则它们的值。只需要一个qsort。 -
@Someprogrammerdude 非常感谢您的帮助。我会使用 qsort 函数来测试一下
-
@Someprogrammerdude 我怀疑这比直接将它们排序更有效。您将一遍又一遍地迭代相同的数据。我发布了一个示例作为答案。