需要帮助我如何获得不同的输出

Need Help as to how I am getting a different Output

本文关键字:输出 何获得 帮助      更新时间:2023-10-16

我正在尝试在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-2n-3 ...直到第一个元素,即n-i。因此j<n-i-1

简单地说,它像气泡一样从底部到顶部(向上(。