2016-01-06 40 views
-1
#include <iostream> 
#include <cstdlib> 
using namespace std; 

void bubblesort(double *array, int size); 
void showarray(double* array, int size); 
void main() 
{ 
int arraysize; 
double *iptr = nullptr; 
cout << "Enter the array size you want" << endl; 
cin >> arraysize; 
iptr = new double[arraysize]; 


for (int i = 0; i < arraysize; i++) 
{ 

    iptr[i] = (rand() % 10) + 1; 
    cout << "Number " << i + 1 << ":" << iptr[i] << endl; 
} 

cout << "Array after arrange" << endl; 
bubblesort(iptr, arraysize); 
showarray(iptr, arraysize); 

delete[] iptr; 
iptr = nullptr; 
system("Pause"); 

} 

void bubblesort(double *array, int size){ 
bool swap; 
double temp; 
do 
{ 
    swap = false; 
    for (int i = 0; i < size; i++) 
    { 
     if (array[i] > array[i + 1]) 
     { 
      temp = array[i]; 
      array[i] = array[i + 1]; 
      array[i + 1] = temp; 
      swap = true;  
     } 
    } 
} while (swap); 
} 
void showarray(double *array, int size){ 
for (int i = 0; i < size; i++) 
    { 
    cout << array[i] << " " << endl; 
    } 
} 

這是我的小程序。我正在嘗試使用bubblesort函數對我的隨機數組進行排序。但我不能運行程序,我找不到問題。它不斷彈出一個觸發斷點的窗口。使用bubblesort對隨機數字的動態數組進行排序

+2

,並通過您的代碼步會給你造成比要求更快地在這裏(假設你的代碼編譯的話)。 –

+1

這聽起來像你可能需要學習如何使用調試器來遍歷你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

一個完全合理的問題,得到了明顯的降低。 – Robinson

回答

1

您訪問您的array越界。如果你的數組有N個元素,那麼你的元素的索引是0,1,2 ... N-1。適應你的代碼是這樣的:

void bubblesort(double *array, int size){ 
    bool swap; 
    do 
    { 
     swap = false; 
     for (int i = 0; i < size-1; i++) 
          // ^^ because you access to i+1 
     { 
      if (array[i] > array[i + 1]) 
      { 
       double temp = array[i]; 
       array[i] = array[i + 1]; 
       array[i + 1] = temp; 
       swap = true;  
      } 
     } 
    } while (swap); 
} 
0

在功能冒泡有訪問存儲器陣列超越時i等於size - 1

使用你的方法的函數可以寫成下面的方式

企圖
void bubble_sort(double *a, size_t n) 
{ 
    bool swap; 

    do 
    { 
     swap = false; 
     for (size_t i = 1; i < n; i++) 
     { 
      if (a[i] < a[i - 1]) 
      { 
       double temp = a[i - 1]; 
       a[i - 1] = a[i]; 
       a[i] = temp; 
       swap = true;  
      } 
     } 
    } while (swap); 
} 

此外,至少在每次迭代之後減少函數中數組的上限會更有效,因爲具有較高值的​​元素將被排序。

還要考慮到main函數不帶參數應可能使用調試器聲明如下

int main()