繁体   English   中英

如何在C中使用指针符号和冒泡排序算法对函数中的数组进行排序

[英]How do i sort an array in a function using pointer notation and the bubble sort algorithm in C

我正在尝试使用冒泡排序算法对用户输入的6数字进行排序。 我的程序必须是模块化的,因此我已将程序编写为一个单独的函数,但是我始终遇到两个错误,而且我不知道如何纠正它们。

Error 1. Lvalue required in function sort_Nums(int *)

Error 2. Expression syntax in function sort_Nums(int *)

这是我的代码:

void sort_Nums(int*picked_nums)
{
    int i,step,temp;

    for(step=0; step<SIZE-1; ++step)
        for(i=0; i<SIZE-step-1; ++i)
        {
            if(*(picked_nums+i) > *(picked_nums+i)+1)
            {
                temp=*(picked_nums+i);
                *(picked_nums+i) = *(picked_nums+i)+1;
                *(picked_nums+i)+1 = temp;
            }
        }

        printf("The numbers you chose in order are:\n");
        for(i=0; i=<SIZE; ++i)
        {
            printf("%d\n", *(picked_nums+i));
        }   

        printf("Press any key to return to main menu");
        getchar();
    }

在此先感谢您,如果这是一个愚蠢的问题,它只是一个语法错误或其他原因,我感到抱歉,但是我几乎已经编码了9小时,而且这项作业明天就要交了,所以这是不得已的事情。

嗨,您的if条件if(*(picked_nums+i)>*(picked_nums+i)+1)是错误的,应该是if(*(picked_nums+i)>*(picked_nums+i+1)) 根据气泡短逻辑,您需要与数组中的下一个元素进行比较。 喜欢

if (arr[1] > arr[2] )

而你在做

if (arr[1] > arr[1] + 1 ) which is wrong.

假设arr [1] = 4且arr [2] = 3

与下面的if条件,它应该刷卡

if (arr[1] > arr[1+1] )因为是if (4 > 3)为真

但是您的条件是否如下所示

if(arr [1]> arr [1] + 1)等于if (4 > 3+1 )为假

在这里,您将1加到值上,而不是加到指针上,第二行导致Lvalue错误:

*(picked_nums+i)=*(picked_nums+i)+1;
*(picked_nums+i)+1=temp;

更正后的代码将如下所示:

*(picked_nums+i)=*(picked_nums+i+1);
*(picked_nums+i+1)=temp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM