Сортировка массива выходит за рамки размера - PullRequest
0 голосов
/ 09 апреля 2020

Я написал эту программу для сортировки пары чисел на основе четного индекса в порядке возрастания. Например; «1,4,15,3» будет «15,3,1,4» после сортировки. Сортировка работает правильно, но проблема, с которой я столкнулся, заключалась в том, что внутренний l oop сравнивал элементы за пределами размера массива. Это сравнивается со случайным числом. Я не знаю точное время работы l oop (я пробовал размер - 3). Пожалуйста, помогите мне исправить эту ошибку. Вот код.

#include <iostream>

void ssort(int arr[], int arrSize)
{
    int j, k;
    bool flag;
    do
    {
        flag = false;   
        for (int i = 0; i <arrSize; i++)  //Runs 10 times
        {
            if (arr[i+1] > arr[i+3])      //compare the 2nd element with 4th
            {
                j = arr[i+2];  //j holds 3rd element
                k = arr[i+3];    //k holds 4th element

                arr[i+2] = arr[i];   //3rd element is now 1st element
                arr[i+3] = arr[i+1];    //fourth element is now 2nd element

                arr[i] = j;    //1st is now 3rd element
                arr[i+1] = k;  //2nd is now fourth element

                flag = true;
            }
        }
    }
    while (flag);

}
int main()
{

    int arr[10] = {1,5,2,15,10,4,15,23,16,15};
    std::cout <<"Unsorted array \n";
    for (int i: arr)
    {
        std::cout <<i <<" ";
    }
    std::cout <<"\n";
    ssort(arr,10);

    std::cout <<"Sorted \n";
    for (int i: arr)
    {
        std::cout <<i <<" ";     
    }
    return 0;
}


1 Ответ

0 голосов
/ 10 апреля 2020

Всегда имейте в виду, чтобы проверить угловые случаи. когда вы добавляете постоянное значение к индексу, то добавление не должно пересекать массив size-1. Добавьте чек, и вы обработаете угловые ящики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...