【发布时间】:2017-06-27 15:22:29
【问题描述】:
我需要将奇数位置的元素降序排序,偶数位置的元素升序排序。这是我的代码,我无法打破第一个循环。
#include<stdio.h>
int main()
{
int n, t;
printf("Enter the size of the array\n");
scanf("%d", &n);
int i, a[n];
if ((n > 20) || (n <= 0))
printf("Invalid Size");
else
{
printf("Enter the values\n");
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < n; i + 2)
{
if (a[i] > a[i + 2])
{
t = a[i];
a[i] = a[i + 2];
a[i + 2] = t;
}
}
for (i = 1; i < n; i + 2)
{
if (a[i] < a[i + 2])
{
t = a[i];
a[i] = a[i + 2];
a[i + 2] = t;
}
}
for (i = 0; i < n; i++)
{
printf("%d\n", a[i]);
}
}
}
【问题讨论】:
-
;i+2-->;i += 2?并注意越界错误。 -
@JustinJ.:VLA 是标准的。这是 C,不是 C++。
-
for (i = 0; i < n; i + 2)->for (i = 0; i < n-2; i += 2)避免访问数组外,即使用i < n-2; -
您并没有真正进行排序。您的代码当时只是交换了两个元素。要对数组进行排序,您需要与所有其他元素进行比较。无论如何,试试这个 - 1)将数组分成两个数组,2)在每个数组上使用 qsort,3)重建整个数组。这样就不用自己写排序代码了
-
@JustinJ.:好吧,如果您将使用仅适用于 C90 的古老编译器,那么仅使用古老的功能就会遇到问题。自上个千年(C99)结束以来,VLA 一直是标准 C 的一部分。微软还没有意识到新千年的事实是一个单独的问题。
标签: c arrays sorting bubble-sort