簡體   English   中英

使用指針對數組進行排序 - C 編程

[英]Sorting array using pointers - C programming

我的代碼有問題。 我正在嘗試使用指針對數組進行排序。 我遇到的問題是,當程序對數組進行排序時,它不會處理最后一個輸入元素。 到目前為止,我還不太習慣使用指針。 我會很感激一些反饋。 這是代碼

#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]。 這在 size 是數組的實際大小時有效。 因此,您無需減少主 function 內的 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;
            }
        }
    }       
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM