2016-01-06 42 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()