СШ
/* начинаем поиск справа налево -1 0 */
/* проверяем чтобы указатели находились в пределах границ массива */
while (ptr_One != ptr_Two && (element = *ptr_One) >= 0) {
printf("[debug] <-- %4f > 0\n", *ptr_One);
ptr_One++;
}
}
if (ptr_One != ptr_Two && *ptr_One < 0) {
float tmp = *ptr_Two;
*ptr_Two = *ptr_One;
*ptr_One = tmp;
ptr_One = step_ptrOne;
ptr_Two = step_ptrTwo;
continue;
}
/* откатываемся в предыдущее состояние */
ptr_One = tmp_step_ptrOne;
}
/* проверяем чтобы указатели находились в пределах границ массива */
while (ptr_Two != ptr_One && (element = *ptr_Two) < 0) {
printf("[debug] 0 < %4f\n", *ptr_Two);
ptr_Two--;
}
/* тут все элементы справа от ptr_Two уже отрицательные, а сам элемент */
/* если все элементы уже отсортированы, выходим */
if (ptr_One == ptr_Two) {
printf("[debug] %4f =2\n", *ptr_Two);
break;
}
/* тут указатели еще не встретились */
/* если один из элментов нужно переставить */
printf("[debug] %4f [%ld] ? %4f [%ld] \n", *ptr_One, ptr_One - main_array, *ptr_Two, ptr_Two - main_array);
/* -1 0 -> 0 -1 это будет гарантировать, что указатель ptr_Two будет сдвинут */
/* 0 1 -> 1 0 это будет гарантировать, что указатель ptr_One будет сдвинут */
/* повторяем цикл, так как состояние системы поменялось, указатели восстанавливаются */
if (*ptr_One == 0 && *ptr_Two > 0)
{
float tmp = *ptr_Two;
*ptr_Two = *ptr_One;
*ptr_One = tmp;
ptr_One = step_ptrOne;
ptr_Two = step_ptrTwo;
continue;
}
if (*ptr_One < 0 && *ptr_Two == 0)
{
float tmp = *ptr_Two;
*ptr_Two = *ptr_One;
*ptr_One = tmp;
ptr_One = step_ptrOne;
ptr_Two = step_ptrTwo;
continue;
}
/* тут отдельный кейс на центральные элементы */
while (ptr_One != ptr_Two && *ptr_One == 0 && *ptr_Two == 0) {
ptr_One++;
}
while (ptr_Two != ptr_One && *ptr_One == 0 && *ptr_Two == 0) {
ptr_Two--;
}
/* если все элементы уже отсортированы, выходим */
if (ptr_One == ptr_Two) {
printf("[debug] %4f 1=2\n", *ptr_Two);
break;
}
if (step_ptrOne == ptr_One && step_ptrTwo == ptr_Two) {
break;
}
}
for (int i = 0; i < length_of_main_array; i++) {
printf("\n%4f", main_array[i]);
}
printf("\n");
}
int function_of_filling_array(int length, float* mainArray)
{
for (int i = 0; i < length; i++) {
*(mainArray + i) = (rand() % 10 + -3)/1.2 ;
}
return 0;
}