需要帮助我如何获得不同的输出
Need Help as to how I am getting a different Output
我正在尝试在C 中实现气泡排序算法,但我没有得到所需的输出,因此我需要帮助。
#include <iostream>
using namespace std;
void BubbleSort(int arr[] , int n)
{
for(int i=0 ; i<n-1 ; i++) // Iterating for (n-1) Rounds
{
for(int j=0 ; j<n ; j++)
{
if(arr[j]>arr[j+1])
{
int temp ;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp ;
}
}
}
}
int main()
{
int n,arr[50] ;
cin >> n ;
for(int i=0 ; i<n ; i++)
{
cin >> arr[i];
}
BubbleSort(arr,n);
for(int i=0 ; i<n ; i++)
{
cout << arr[i] << " " ;
}
}
样本测试用例(尺寸7(:2 13 4 1 3 6 28
预期输出:1 2 3 4 6 13 28
实际输出(我正在得到(:1 0 2 3 4 6 13
在此循环中
for(int j=0 ; j<n ; j++)
{
if(arr[j]>arr[j+1])
{
int temp ;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp ;
}
}
当j
等于n - 1
时,试图访问数组之外的内存,因为在这种情况下,j + 1
给出n
,并且该数组在索引上没有等于n
的元素。因此,在这种情况下,此表达式arr[j+1]
无效。
将内部循环更改为for(int j=0 ; j<n-i-1 ; j++)
。每当内部循环完全执行时,元素都会处于正确的位置。这意味着,内部循环应执行n-i-1
次。
#include<iostream>
using namespace std ;
void BubbleSort(int arr[] , int n)
{
for(int i=0 ; i<n-1 ; i++) // Iterating for (n-1) Rounds
{
for(int j=0 ; j<n-i-1 ; j++)
{
if(arr[j]>arr[j+1])
{
int temp ;
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp ;
}
}
}
}
int main(){
int n,arr[50] ;
cin >> n ;
for(int i=0 ; i<n ; i++)
{
cin >> arr[i];
}
BubbleSort(arr,n);
for(int i=0 ; i<n ; i++)
{
cout << arr[i] << " " ;
}
}
在气泡排序中,内部循环的一个完整执行将使数组的最大元素放入数组的底部。在内部循环的第一次执行之后,最大元素将处于第n个位置或最后一个位置。因此,在第二个执行过程中,内部循环应仅解析n-1
元素,并将第二大元素复制到n-1
位置或第二个位置。同样,它适用于n-2
,n-3
...直到第一个元素,即n-i
。因此j<n-i-1
简单地说,它像气泡一样从底部到顶部(向上(。
相关文章:
- 在多次运行中获得一致的callgrind输出
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 未获得字符串中的预期输出
- 在黑客地球上没有获得以下C ++代码问题的输出
- 使用OpenMP获得完整、无损坏的输出需要什么
- 我不明白我的编译器是如何获得此输出的
- 尝试从多态函数中获得不同的输出
- 无效* 转换获得意外输出
- 未获得 N-皇后问题的预期输出
- 我无法从中获得输出
- 为什么每次在 openmp 代码中获得不同的输出?
- C++程序未获得所需的输出
- 需要帮助我如何获得不同的输出
- C++ - 未获得控制台的预期输出
- 输出时获得的奇怪值
- 使用 ofstream 进行缓冲文本输出以获得性能
- c++在标准输入上写入数据,并从标准输出中获得输出
- 如何在Linux上的c++中将数据管道到bzip2中并从其标准输出中获得结果数据?
- 如何在C中显示输出时获得链表索引
- 如何在当前时间的打印输出中获得更高的精度(几分之一秒)