Сортировка массива работает только с некоторыми наборами, а не с другими - PullRequest
0 голосов
/ 10 апреля 2020

Я написал эту скорректированную версию пузырьковой сортировки. Он сравнивает каждый 2-й и 4-й элементы и, если 2-й больше 4-го, он заменяет 3-й и 4-й на 1-й и 2-й. Например, предположим, что pair1 - это (a [0], a [1]), а pair2 - это (a [2], a [3]). Он сравнивает [1] с [3], и если значение для [1] превышает значение для [3], пара1 становится (a [2], a [3]) и pair2 становится (a [0], a [1]). Я проверил это с 2 наборами и только проходит один тест. Пожалуйста, помогите мне отладить это.

#include <iostream>

void ssort(int arr[], int arrSize)       //pass integer array and it's size
{
    int j, k;
    bool flag;
    do
    {
        flag = false;  //Set to false at the start
        for (int i = 0; i<arrSize;i++)
        {
            if (i+3 >=arrSize)
            {
                break;       //If boundary is reached
            }
            else
            {
                if (arr[i+1] > arr[i+3])   //compares the value of 2nd element with 4th element
                {

                    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 test1[24] = {14, 18, 45, 60, 21 ,24, 14, 18, 45, 60, 21, 24, 11 ,55, 23, 40, 24 ,24, 28, 33 ,48, 65, 45, 47};    //Fails this test


//sorted test1 would be {14,18,14,18,21,24,21,24,24,24,28,33,23,40,45,47,11,55,45,60,45,60,48,65}
//displays {23 18 11 18 14 24 14 24 21 24 21 33 24 40 28 47 45 55 45 60 45 60 48 65}

int test2[10] = {10,15,20,28,4,15, 29,35,14,18};   //Passes this test

//sorted order for test2 would be {10,15,4,15,14,18,20,28,29,35}
//displays {10 15 4 15 14 18 20 28 29 35}

    //First set test
    std::cout <<"Unsorted array 1 \n";
    for (int i: test1)
    {
        std::cout <<i <<" ";  //displays unsorted array
    }
    std::cout <<"\n";
    ssort(test1,24);

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

    //Second set test
    std::cout <<"Unsorted array 2 \n";
    for (int i: test2)
    {
        std::cout <<i <<" ";  //displays unsorted array
    }
    std::cout <<"\n";
    ssort(test2,10);

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

    return 0;
}




1 Ответ

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

Внутренний l oop работает для размера / 2 -1, и я должен увеличиваться на 2 каждый раз.

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