给定一个数组我需要对它进行排序,使得第一个元素是最小的值,第二个元素是最大的元素,第三个元素是第二个最小的元素,依此类推。
但我的代码只打印原始数组,我无法弄清楚原因。任何建议将不胜感激。
#include <stdio.h>
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<n;j++){
if (A[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;
}
答案 0 :(得分:1)
您需要使用指针传递引用。
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]。
答案 1 :(得分:0)
我在你的程序中注意到的第一个问题是你的交换功能。在交换函数中,参数是原始数据类型。因此,该函数创建整数副本&#34; m&#34;和&#34; n&#34;,并在函数swap
范围内切换值。但是一旦函数返回,你就没有真正交换任何东西。要实际交换在main中创建的数组中的值,您需要通过引用进行传递(将指针传递给您尝试交换的变量)。修改你的交换函数,如下所示:
void swap( int *m, int *n)
{
int temp;
temp = *m;
*m = *n;
*n = temp;
}
然后在main中,使用&
运算符(地址)传入数组中该值的地址。以下是一个示例:swap (&A[i],&A[j]);
其他建议: