使用冒泡排序对随机数量的动态数组进行排序

Use bubblesort to sort a random number of dynamic array

本文关键字:数组 动态 排序 冒泡排序 随机数      更新时间:2023-10-16
#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;
    }
 }

这是我的小程序。我正在尝试执行气泡排序函数来对我的随机数数组进行排序。但是我保持无法运行该程序,也找不到问题。它不断弹出触发断点的窗口。

您可以越

界访问您的array。如果你的数组有 N 个元素,你的元素的索引 ar 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);
}

在函数 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()