c - 使用交替的最小值 - 最大值对数组进行排序

标签 c arrays sorting

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

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

#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/

相关文章:

c - 动态分配的结构数组传递给函数并通过索引访问

c - strace:打印路径而不是地址

java - 使用阈值的多线程冒泡

javascript - 旋转数组并将所有组合存储在对象变量中

php - 如何像Excel一样对日语进行排序

c - 如何为具有 SRC、OBJ 和 BIN 子目录的 C 项目创建 Makefile?

c - libgcc_s.so : Error adding symbols: File in wrong format

c++ - 如何在 C++ 中创建一个位于堆而不是堆栈的数组?

javascript - 从 1970 年之前的日期数组中获取最高日期

java - 按其值的大小对 HashMap 进行排序。 java