参数中的指针麻烦..在c中冒泡排序

时间:2015-09-14 02:50:49

标签: c sorting

我的冒泡排序程序遇到了问题。我已经完成了所有工作,除非我遇到问题,我的函数调用我的swap()函数..然后将输入用作参数... < / p>

我尝试了很多不同的方法,下面是我最近的尝试。

我需要将交换作为单独的函数。 - - - - - - - - - 编辑 - - - - - - - - - - - - - - - 根据你的建议,尤其是Haris和BLUEPIXY,我的代码似乎正在运行..

虽然它有一些错误,并说它无法启动(我假设这与代码块有关,因为它给了我一些问题)

澄清其系统错误而非codeblocks错误 没有更多的错误代码

这是我的代码:

            #include <stdio.h>
            #define MAX 9


            //moved values up here so it would be declared before its used below
            int values[] = {7, 3, 9, 4, 6, 1, 2, 8, 5};

            //functions
            void printValues(){
                int i;
                printf ("{");
                for(i = 0;i < 9;i ++){//small for loop to iterate through each element in array
                    printf("%d ", values[i]);
                }//end for loop
                printf("}");
            } //end printValues

            void swap(int *x, int *y){
                int* temp;
                *temp = *x;
                *x = *y;
                *y = *temp;
            } //end swap function

            void sort(){
                int i;
                int j;
                for (i=0;i<9;i++){ // starts our loop; loops 9 times, one for each int, increments for each loop.
                    for (j=0;j<9-i-1;j++){//starts at max length minus 1 minus i's current pass
                        if (values[j] > values[j + 1]){
                            swap(&values[j] , &values[j+1]);
                        }//end if statement
                    }//end secondary for loop
                }//end main for loop
            } //end sort function

            //# list; 9 integers



            int main(){
              printf("Before: \n");
              printValues();
              sort();
              printf("After: \n");
              printValues();

              return(0);
            } // end main

1 个答案:

答案 0 :(得分:1)

我可以在您的代码中发现两个问题..

  

1)额外的半结肠

void swap(*x, *y){
            temp = x;
            x = y;
            y = temp;
        }; //end swap function
     //  ^ Should not have a semi-colon there

在函数原型的末尾给出了分号,在代码中也缺少。其他功能也是如此。

  

2)变量未定义

temp变量在swap()中未声明。做

int* temp;
  

3)swap()函数

中的参数类型

swap()功能更改为

void swap(int* x,int* y)
  

4)您将整数传递给swap()函数。最好将变量的地址传递给swap(),然后使用它进行交换。与评论中的BLUEPIXY建议一样。

你的功能应该是

void swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

而且,你应该把它称为,

swap(&values[j] , &values[j+1]);