c - 使用指针对数组进行排序 - C 编程

标签 c arrays sorting pointers

我的代码有问题。我正在尝试使用指针对数组进行排序。我遇到的问题是,当程序对数组进行排序时,它不会处理最后一个输入元素。到目前为止我还不太习惯使用指针。我希望得到一些反馈。这是代码

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void inputarray(int *arr, int size);
void printarray(int *arr, int size);
void sortascending(int *arr, int size);

int main()
{
int array_size, array[MAX],choice;
    printf("Enter size of array:\n");
    scanf("%d",&array_size);
    array_size -= 1;
    printf("Enter elements:\n");
    inputarray(array, array_size);
    printf("Sorting scending:\n");
    sortascending(array, array_size);

    printarray(array, array_size);

    return 0;
}


void inputarray(int *arr, int size)
{
    int *arrayend = arr + size - 1;
    while(arr <= arrayend)
    {
        scanf("%d\n",arr++);
    }

}

void printarray(int *arr, int size)
{
    int *arrayend = arr + size-1;
    while(arr <= arrayend)
    {
        printf("%d", *(arr++));
    }
}


void sortascending(int *arr, int size)
{
    int *arrayend = arr + size - 1; 
    int i,j,t;
    for(i=0; i< size; i++)
    {
        for(j=i+1; j< size; j++)
        {
            if(*(arr+j)<*(arr+i))
            {
                t = *(arr+i);
                *(arr+i) = *(arr+j);
                *(arr+j) = t;
            }
        }
    }       
}

所以基本上,如果我按照 9,8,7,6,5 的顺序输入 5 个元素,它将返回 6,7,8,9,忽略最后一个输入元素(即 5)。有什么建议吗?

最佳答案

我发现在将 array_size 作为输入后,您将其减 1,这是不必要的。这是因为在所有函数中,您正在执行 arrend = arr + size - 1,即,您正在执行 arrend = arr[size-1]。当大小是数组的实际大小时,此方法有效。因此,您无需在 main 函数内递减 array_size 。 工作代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void inputarray(int *arr, int size);
void printarray(int *arr, int size);
void sortascending(int *arr, int size);

int main()
{
int array_size, array[MAX],choice;
printf("Enter size of array:\n");
scanf("%d",&array_size);
//no need to decrement size here
printf("Enter elements:\n");
inputarray(array, array_size);
printf("Sorting scending:\n");
sortascending(array, array_size);

printarray(array, array_size);

return 0;
}


void inputarray(int *arr, int size)
{
    int *arrayend = arr + size - 1;
    while(arr <= arrayend)
    {
        scanf("%d",arr++);
        //remove \n from above line

    }

}

void printarray(int *arr, int size)
{
    int *arrayend = arr + size-1;
    while(arr <= arrayend)
    {
        printf("%d", *(arr++));
    }
}


void sortascending(int *arr, int size)
{
    int *arrayend = arr + size - 1; 
    int i,j,t;
    for(i=0; i< size; i++)
    {
        for(j=i+1; j< size; j++)
        {
            if(*(arr+j)<*(arr+i))
            {
                t = *(arr+i);
                *(arr+i) = *(arr+j);
                *(arr+j) = t;
            }
        }
    }       
}

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

相关文章:

我可以将 lua_tointeger() 用于 off_t 吗?

c - 运行时内核驱动程序完整性检查

c - C 中的嵌套函数有什么用处?

javascript - 计算字符串中的所有字符

c++ - 排序给出最后位置元素的错误输出

php - 更改数组中的索引顺序

coreFlightSystem 的自定义应用程序 : "Could not load cFE application"

php - 从 2 个数组中获取唯一值

java - java字符串中的特殊字符

ios - 两个 View 层次结构之间的公共(public) subview