c - C 中的指针数组排序有意外的输出

标签 c

#include <stdio.h>

void sort(int *ptr, int n) {
    int i,j,tmp;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
                if (ptr[i] < ptr[j])
                {
                    tmp=ptr[i];
                    ptr[i]=ptr[j];
                    ptr[j]=tmp;
                }
}
int main() {
    int i,n;
    int *ptr;
    printf("Nr. of elements : 5 \n");
    n=5;

    ptr=(int*)malloc( n * sizeof(int));
    for (i=0;i<n;i++) {
        scanf("%d",&ptr[i]);
    }

    printf("Initial array is : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }

    sort(ptr,n);

    printf("Sorted array is : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }
    return 0;
}

这是我的代码。我正在尝试使用函数对指针数组进行排序。 无论 (int) 输入是什么,它都能很好地解决问题。 我的困惑是我正在使用 ptr[i] < ptr[j] 代替 ptr[i] > ptr[j] 因为它通常应该按升序排序。 这是为什么?

最佳答案

不,你的困惑是错误的。看for循环,以及i之间的关系和 j .有时i < j和时间 i > j ,那么什么构成“故障”并需要交换?

内部循环应该从 i+1 开始不在“0”;这将使i之间的关系和 j不变。

关于c - C 中的指针数组排序有意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59802669/

相关文章:

c - C中的二维数组

c - 如何在 C 编程中检查给定文件是否为二进制文件?

javascript - 通过 Emscripten 在 Javascript 中进行结构操作

c - 多线程udp服务器/客户端

c++ - Windows进程管理

c - 是否可以从 OCaml 调用 C 函数并有效地传递一个巨大的数组?

c - 为了将 tcp 程序转换为 udp 需要进行哪些更改

C SIMPLE 温度转换器/摄氏度到华氏度未知错误和输出

c - 有没有办法从一个项目中获得两个二进制文件?

c - FD_CLOEXEC fcntl() 标志有什么作用?