2011-11-22 72 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],对吧?

此外,这不是一个泡沫排序,它关闭,但不是实际。再次阅读您的教科书。