#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函数来对我的随机数组进行排序。但我保持不能运行程序,我找不到问题。它会弹出一个触发断点的窗口。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
在函数bubblesort中,当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()