使用bubblesort对随机数的动态数组进行排序

时间:2016-01-06 13:54:04

标签: c++

#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函数来对我的随机数组进行排序。但我保持不能运行程序,我找不到问题。它会弹出一个触发断点的窗口。

2 个答案:

答案 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()