C#

Помогите исправить код на C#

Помогите исправить код на C# Задача:
Даны массив x[1..n] целых чисел и число y.Переставить числа в массиве таким образом, чтобы слева от некоторых границы стояли числа, меньше или равные y, а справа - больше или равны y.
Не работает с отрицательными числами.Буду очень благодарен
Вот сам код
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размер массива: ");
int n = int.Parse(Console.ReadLine());

int[] x = new int[n];

Console.WriteLine("Введите элементы массива:");

for (int i = 0; i < n; i++)
{
x[i] = int.Parse(Console.ReadLine());
}

Console.WriteLine("Введите число y: ");
int y = int.Parse(Console.ReadLine());

int left = 0;
int right = n - 1;


for (int i = 0; i < n; i++)
{
if (x[left] <= y)
{
left++;
}
else
{
for (int j = n - 1; j >= 0; j--)
{
if (x[right] >= y)
{
right--;
}
else
{
int temp = x[left];
x[left] = x[right];
x[right] = temp;
left++;
right--;
break;
}
}
}

if (left > right)
{
break;
}
}


Console.Write("Переставленный массив: ");
for (int i = 0; i < n; i++)
{
if (i == left)
{
Console.Write("| ", y);
}

Console.Write(x[i] + " ");
}
Console.ReadKey();
}
}
}
Проблема в данном коде заключается в том, что при работе с отрицательными числами условие if (x[left] <= y) не срабатывает корректно. Для решения этой проблемы можно использовать следующий код:


ini
Copy code
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите размер массива: ");
int n = int.Parse(Console.ReadLine());

int[] x = new int[n];

Console.WriteLine("Введите элементы массива:");

for (int i = 0; i < n; i++)
{
x[i] = int.Parse(Console.ReadLine());
}

Console.WriteLine("Введите число y: ");
int y = int.Parse(Console.ReadLine());

int left = 0;
int right = n - 1;

while (left <= right)
{
while (x[left] <= y && left < n - 1)
{
left++;
}

while (x[right] > y && right > 0)
{
right--;
}

if (left <= right)
{
int temp = x[left];
x[left] = x[right];
x[right] = temp;
left++;
right--;
}
}

Console.Write("Переставленный массив: ");
for (int i = 0; i < n; i++)
{
Console.Write(x[i] + " ");
}

Console.ReadKey();
}
}

Данный код использует два цикла while для поиска элементов, которые нужно переставить. Внутри цикла while происходит проверка на соответствие условию и инкремент/декремент соответствующего указателя. Если указатели не пересеклись, то происходит обмен элементов. В конце программы выводится переставленный массив.
АМ
Александр Мироненко
4 724
Лучший ответ
Андрей Королев Пошла вон нейронка!
А ты думал, что сегодня захотят неправильную ; поставить
Cергей Перекрест Так им и ответить шуткой надо...
На 1 Апреля им и этого хватит.

После стоки
int y = int.Parse(Console.ReadLine());
... все убери и вставь это
 Console.Write("Переставленный массив: "); 

Array.Sort(x); // отсортируй массив
var idxY = Array.LastIndexOf(x, y); // найди последний искомый индекс
// ... и поставь после него сепаратор
var result = string.Join("", x.Select((v, i) => v.ToString() + (i == idxY ? " | " : " ")));

Console.Write(result);
Console.ReadKey();
UPD: Чуть не забыл. В начале файла добавь "using System.Linq;"