Я написал эту скорректированную версию пузырьковой сортировки. Он сравнивает каждый 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;
}