c - 使用指针对整数数组进行排序

标签 c arrays pointers

我正在尝试编写一个使用指针对数组(用户输入)进行排序的程序。
这是我写的代码:

#include <stdio.h>
void main()
{
    int a[100],i,n,j,t;
    printf("Enter number of elements:\n");
    scanf("%d",&n);
    printf("Enter array:\n");
    for (i=0; i<n; i++)
    {
        scanf("%d",a+i);
    }
    for (i=0; i<(n-1); i++)
    {
        for (j=i+1; i<n; i++)
        {
            if (*(a+i)>*(a+j))
            {
                t=*(a+i);
                *(a+i)=*(a+j);
                *(a+j)=t;
            }
        }
    }
    printf("Sorted array (ascending) is:\n");
    for (i=0; i<n; i++)
    {
        printf("%d ",*(a+i));
    }
    printf("\n");
}

编译器没有显示任何错误。

输入:
5
1 5 4 2 8
输出:
1 8 4 2 5

我是自学的,我知道指针类似于数组。我知道如何用数组完成相同的任务,但是当我在这里尝试用指针替换它们时,它不起作用。

我在这里做错了什么?

最佳答案

问题出在您排序时的第二个循环中:

for (i=0; i<(n-1); i++)
    {
        for (j=i+1; i<n; i++)
        {
            if (*(a+i)>*(a+j))
            {
                t=*(a+i);
                *(a+i)=*(a+j);
                *(a+j)=t;
            }
        }
    }

您需要将计数器名称更改为 j :

for (i=0; i<(n-1); i++)
    {
        for (j=i+1; j<n; j++)
        {
            if (*(a+i)>*(a+j))
            {
                t=*(a+i);
                *(a+i)=*(a+j);
                *(a+j)=t;
            }
        }
    }

这一行有问题:

for (j=i+1; j<n; j++)

关于c - 使用指针对整数数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45927206/

相关文章:

C++ 多维数组的可能性

c++ - 将 std::string 的 vector 转换为 char***

C 应用程序在将数据写入管道后挂起。如何检查 "cat"进程是否完成?

c++ - APR 和大文件

C 编程使用静态函数将华氏温度转换为摄氏度误差

c - gcc 没有给出冲突类型错误

将二维数组转换为 C 中的灰度图像

java - return 在 boolean 方法中究竟做了什么?

c++ - 在 C++ 中实例化指向新对象的指针时出现问题

c - 指向 int 类型的 n 个元素数组的指针(奇怪的地址)