2015-09-14 45 views
-1

我有我的泡沫排序程序的麻煩..我已經完成除了我有問題,我的函數調用我的swap()函數..然後使用作爲參數輸入...麻煩指數在參數..冒泡排序在c

我已經嘗試了很多不同的方式,下面是我最近的嘗試。

我需要將交換作爲單獨的功能。編輯----------------------------- 隨着你的建議,尤其是哈里斯和BLUEPIXY我的代碼似乎工作..

雖然它有一些錯誤,並說它不能開始(即時通訊假設這與更多的代碼塊,因爲它一直給我的問題)

澄清其系統錯誤不是代碼塊錯誤 沒有更多的錯誤代碼

這裏是我的代碼:

  #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 
+0

的錯誤消息是很清楚的。你不明白什麼? – juanchopanza

+0

許多問題。 1.「swap」中的參數類型丟失。 2.沒有聲明'temp'類型。 3.你將整數傳遞給'swap'。這些都是通過引用傳遞的,所以在函數退出時,'swap'中所做的任何更改都會丟失。我的猜測是,你實際上想要傳遞一個指向值的指針,而在'swap'中你需要取消引用這些指針。 – kaylum

+0

'void swap(int * x,int * y){int} temp = * x; * x = * y; * y = temp; }',然後在調用者端'swap(&values [j],&values [j + 1]);' – BLUEPIXY

回答

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() funtion更改爲

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]); 
+0

額外的分號幾乎沒有關係。還有更糟糕的問題。 – juanchopanza

+0

@juanchopanza但我猜想一些錯誤是由於那個.. – Haris

+0

我原來有你在第3步建議,但它抱怨我轉換整數int *或反之亦然 – Cyrus