2011-11-22 100 views
-1

我遇到了冒泡排序問題。我按降序對8個數字進行排序;但是,在打印到屏幕時,第一個數字不在數組中。這就像是一個出界的錯誤,或打印一些內存的內容。任何幫助讚賞。冒泡排序功能實現不起作用

#include <iostream> 
using namespace std; 

void sortArray(int nums[]); 
void printArray(int nums[]); 


int main() 
{ 
    int nums[8] = {3, 6, -19, 5, 5, 0, -2, 99}; 

    sortArray(nums); 

    printArray(nums); 

    system("pause"); 
    return 0; 
} 

void sortArray(int nums[]) 
{ 
    bool swap; 
    int temp; 

    do 
    { 
     swap = false; 
     for(int i = 0; i < 8; i++) 
     { 
       if(nums[i] < nums[i+1]) 
       { 
         temp = nums[i]; 
         nums[i] = nums[i+1]; 
         nums[i+1] = temp; 
         swap = true; 
       } 
     } 
    }while(swap); 
} 

void printArray(int nums[]) 
{ 
    for(int i = 0; i < 8; i++) 
    { 
      cout << nums[i] << ", "; 
    } 
    cout << endl; 
} 
+0

這是功課嗎? –

回答

1

您正在訪問的元素超過數組與結尾:

for(int i = 0; i < 8; i++) 
     { 
       if(nums[i] < nums[i+1]) 

如果i上升到7,i+1去出界。

順便說一句,你應該看看使用std::vector而不是普通的數組。

0
 for(int i = 0; i < 8; i++) 
    { 
      if(nums[i] < nums[i+1]) 
      { 
        temp = nums[i]; 
        nums[i] = nums[i+1]; 
        nums[i+1] = temp; 
        swap = true; 
      } 
    } 

i是7,你所訪問的i+1界限的了。

1

First C++ course?我再次成爲助教。

int數組,大小爲= 8,即索引0到7

在你對(INT I = 0;我< 8;我++)你試圖訪問NUMS第[i + 1],當我= 7時會發生什麼?訪問數[8],對吧?

此外,這不是一個泡沫排序,它關閉,但不是實際。再次閱讀您的教科書。