我试图运行一个冒泡排序算法,该算法按升序对数组进行排序,但它在在线编译器中出现了分段错误,我无法找出其中的错误,因为我认为数组中的元素应该具有4的大小,但在我尝试之后,我无法找到解决方案。谁能帮我看看?
#include <iostream>
#include <array>
using namespace std;
void bubble_sort(int arr[]);
void printArray(int arr[]);
int main()
{
int arr[] = {10, 4, 2, 8, 11, 15};
bubble_sort(arr);
printArray(arr);
// cout<<sizeof(arr)<<endl;
return 0;
}
void bubble_sort(int arr[])
{
for (int i = 0; i < sizeof(arr) / 4; i++)
{
for (int j = 0; i < ((sizeof(arr) / 4) - 1); j++)
{
int temp;
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void printArray(int arr[])
{
for (int i = 0; i < (sizeof(arr) / 4); i++)
{
cout << arr[i] << endl;
}
cout << "\n";
}
4条答案
按热度按时间nkcskrwz1#
bubble_sort中嵌套的for循环有一个终止条件
i < ((sizeof(arr) / 4) - 1)
。因为变量i
在嵌套循环中从不递增,所以它将永远循环。试试j < ((sizeof(arr) / 4) - 1)
。这就是导致分段错误的原因。我还建议将数组的大小作为单独的参数传递给函数,而不是试图在函数中使用
sizeof
。正如'Some programmer dude'所提到的,sizeof
函数当前使用的是*int
的大小,而不是数组中元素的数量。main
函数中的sizeof(arr)
可以解决这个问题。(This这是我在Stack Overflow上的第一个答案,所以请原谅我的任何格式错误。
bybem2ql2#
现代C++冒泡排序方式:
演示:https://wandbox.org/permlink/Co4k1GA8ozQ9PfDv
请注意:
5jdjgkvh3#
你的代码中有几个错误。
1.在main()函数中声明int arr[],可以得到正确的数组大小,如下所示:
int array_size = sizeof(arr)/ sizeof(arr[0]);**
1.然而,在main()函数之外,以及在2个函数bubble_sort(arr[])和printArray(int arr[])内部,您将使用以下代码获得错误的数组大小:
int array_size = sizeof(arr)/ sizeof(arr[0]);
因为这两个函数只将输入参数int arr[]视为指向int的指针。
1.但是,代码崩溃的主要原因如下。在bubble_sort()函数中,你的第二个for循环是不正确的,应该写如下:
int j = 0; j <(size - i - 1); j++)
所以,我对你的原始代码做了一些小的修改,它的工作原理如下所示:
==================
注:我的回答与其他人之前的评论非常相似(例如用户“卡登Kroonenberg”和“一些程序员老兄”)。我只想写完整的正确代码,以提高可读性,并为我自己的参考:-)。
bvjxkvbb4#
在C++中有更好的方法来处理数组,例如。