gpt4 book ai didi

c - 我的排序函数给出了意外的输出

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:55 25 4
gpt4 key购买 nike

我编写了一个通用的 C 语言程序,给定一个数字序列,排序,偶数按升序排列,奇数按降序排列,并将所有偶数放在数组的初始部分,然后是奇数。

Example: 2, 5, 1, 0, 4, 7, 9, 3, -2, 10, 20, 15
Expect: -2, 0, 2, 4, 10, 20, 15, 9, 7, 5, 3, 1

需要六个函数。解决方案必须仅使用上述函数提供。不得声明全局变量。使用适当的数据类型、返回类型和函数参数。

  1. Input() – 将元素和值的总数作为来自用户的输入。将值存储在“输入”数组中。
  2. SortEven() – 将偶数按升序排序并将它们存储在名为“even”的数组中
  3. SortOdd() – 将奇数按降序排序并将它们存储在名为“odd”的数组中
  4. Merge() – 将所有偶数放在名为“result”的数组的初始部分,然后是奇数。
  5. Display() – 显示“result”数组的内容。
  6. main() – 调用 Input() 模块开始执行。

程序:

#include <stdio.h>

int main() {
input();
}
int input() {
int n;
printf("Enter The Number Of Elements You Want To Enter : ");
scanf("%d", &n);
int a[n], i, ev = 0, od = 0;
for (i = 0; i < n; i++) {
printf("Enter Number : ");
scanf("%d", &a[i]);
if (a[i] % 2 == 0) {
ev++;
} else {
od++;
}
}
sorteven(a, ev, od, n);
}
int sorteven(int a[], int ev, int od, int n) {
int i, j = 0, swap, even[ev];
for (i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
even[j] = a[i];
j++;
}
}
for (i = 0; i < ev - 1; i++) {
for (j = 0; j < ev - i - 1; j++) {
if (even[j] > even[j + 1]) {
swap = even[j];
even[j] = even[j + 1];
even[j + 1] = swap;
}
}
}
sortodd(a, ev, od, n, even);
}
int sortodd(int a[], int ev, int od, int n, int even[]) {
int i, k = 0, swap, odd[od], j;
for (i = 0; i < n; i++) {
if (a[i] % 2 != 0) {
odd[k] = a[i];
k++;
}
}
for (i = 0; i < od - 1; i++) {
for (j = 0; j < od - i - 1; j++) {
if (odd[j] < odd[j + 1]) {
swap = odd[j];
odd[j] = odd[j + 1];
odd[j + 1] = swap;
}
}
}
merge(a, ev, od, n, even, odd);
}
int merge(int a[], int ev, int od, int n, int even[], int odd[]) {
int merge[n], i;
for (i = 0; i < ev; i++) {
merge[i] = even[i];
}
for (i = ev; i < n; i++) {
merge[i] = odd[i];
}
display(merge, n);
}
int display(int merge[], int n) {
int i;
printf("OUTPUT : ");
for (i = 0; i < n; i++) {
printf(" %d ", merge[i]);
}
}

最佳答案

在查看源代码时,问题位于merge()。功能。两者 sorteven()sortodd()实现得很好,但是当合并两个子数组时,for(i=ev;i<n;i++)不正确。

添加odd[] even[] 末尾的数组数组,写入:

int j;
// point to the first item of odd[]
for(i=ev,j=0;i<n;i++,j++)
{
merge[i]=odd[j];
}

代替:

only odd[0] to odd[od-1] are allocated and defined.

for(i=ev;i<n;i++)
{
merge[i]=odd[i];
}

输出:

{ 2, 5, 1, 0, 4, 7, 9, 3, -2, 10, 20, 15 };

是:

OUTPUT :  -2  0  2  4  10  20  15  9  7  5  3  1

关于c - 我的排序函数给出了意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com