Home > Software design >  I was trying to sort elements of an array in C , but the program doesn't work for 4 elements.
I was trying to sort elements of an array in C , but the program doesn't work for 4 elements.

Time:06-02

Program to sort elements in an array – I ran it using an online IDE, but the code won't work for 4 elements. I tried different values, but it simply won't give the output.

int main()
{
    int el = 0, num = 0;
    cout << "Enter the number of elements in an array:" << endl;
    cin >> el;
    int a[el];
    cout << "ENTER ELEMENTS:" << endl;
    for (int i = 0; i < el; i  )
    cin >> a[i];
    for (int j = 0; j < el; j  )
    {
        for (int i = 0; i < el; i  )
        {
            if (a[i] > a[i 1])
            {
                num = a[i   1];
                a[i   1] = a[i];
                a[i] = num;
            }  
        }
    }
    for (int i = 0; i < el; i  )
    {
        cout << a[i];
        cout << endl;
    }
    return 0;
}

CodePudding user response:

As someone has already mentioned, int a[el] is not standard C unless el is a constant value, known at compile time. You should specify the maximum number of elements by a constant, or you can check std::vector if you want to provide the size of the array at runtime.

As for the question, the bug is here:

for (int j = 0; j < el; j  ) {
    for (int i = 0; i < el; i  ) {
        if (a[i] > a[i   1]) {
            // ... the rest of the code
        }
    }
}

When i = el - 1, the expression a[i 1] tries to access unitialised memory, which is undefined behaviour. Change this second for to this

for (int i = 1; i < el; i  ) {
    if (a[i - 1] > a[i]) {
       // the rest of the code
    }
}

and everything should be fine (just keep in mind to change the code using i as well!).

  •  Tags:  
  • c
  • Related