使用备用最小 – 最大值对数组进行排序

给定一个数组我需要对它进行排序,使得第一个元素是最小值,第二个元素是最大的元素,第三个元素是第二个最小的元素,依此类推。

但我的代码只打印原始数组,我无法弄清楚原因。 任何意见,将不胜感激。

#include  void swap(int m, int n); int main() { int i,j,A[10],n; printf ("enter the number of array elements\n"); scanf ("%d", &n); for (i=0;i<n;i++){ scanf ("%d", &A[i]); } for (i=0;i<n;i++){ if (i%2 == 0){ for (j=i;j<n;j++){ if (A[j] < A[i]){ swap(A[i],A[j]); } } } else if (i%2 != 0){ for (j=i;j A[i]){ swap (A[i],A[j]); } } } } for(i=0;i<n;i++){ printf ("%d\n", A[i]); } return 0; } void swap( int m, int n) { int temp; temp = m; m = n; n = temp; } 

您需要使用指针传递引用。

 void swap( int *m, int *n) { int temp; temp = *m; *m = *n; *n = temp; } 

并更改您的代码,就像这样调用它

 swap (&A[i],&A[j]); 

对于不使用指针的解决方案,您可以使用这样的MACRO;

 #define swap(x,y) do{int t=(x);(x)=(y);(y)=t;}while(0); swap(A[i],A[j]); 

只需在文件顶部定义它,然后删除交换函数和原型。 这都是关于范围的,因为MACRO只是一个文本替换它在正确的范围内使用A [i]。

我在你的程序中注意到的第一个问题是你的交换function。 在交换函数中,参数是原始数据类型。 因此,该函数创建整数“m”和“n”的副本,并在函数swap范围切换值。 但是一旦函数返回,你就没有真正交换任何东西。 要实际交换在main中创建的数组中的值,需要通过引用进行传递(将指针传递给您尝试交换的变量)。 修改你的交换函数,如下所示:

 void swap( int *m, int *n) { int temp; temp = *m; *m = *n; *n = temp; } 

然后在main中,使用&运算符(地址)传入数组中该值的地址。 这是一个例子: swap (&A[i],&A[j]);

其他建议:

  1. 格式化代码,以便for循环中的条件之间有空格。
  2. 添加评论。