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

时间:2017-08-28 20:54:15

标签: 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

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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

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

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++)

答案 1 :(得分:2)

我认为这是因为你的j变量没有正确增加而且使用了错误的比较(正如Patrick所建议的那样)。我认为应该如下:

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