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

manubmxnsb
#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环路,之间的关系ij有的时候i < j有的时候i > j,那么什么构成“乱序”并需要交换?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章