给定一个数组,我需要按这样的方式对它进行排序,即第一个元素是最小值,第二个元素是最大的,第三个元素是第二小的元素,依此类推。
但我的代码只打印原始数组,我无法弄清楚原因。任何建议将不胜感激。
#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;
}
最佳答案
您需要使用指针按引用传递。
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]);
只需在文件顶部定义它并删除交换函数和原型(prototype)。一切都与范围有关,因为 MACRO 只是一个文本替换它在使用 A[i] 的正确范围内。
关于c - 使用交替的最小值 - 最大值对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227486/