как отсортировать часть одномерного массива после определенного элемента?
не знаю как записать, чтобы сортировались только элементы после последнего отрицательного, кратного двум числа (сортировка элементов по убыванию)
int[] array = new int[30];
Random rand1 = new Random();
int tmp = 0;
for (int i = 0; i < array.Length; i++)
{
array[i] = rand1.Next(-10, 15);
}
Console.WriteLine("початковий масив");
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
int num;
for (int i = 0; i < array.Length; i++)
{
if (array[i] < 0 && array[i] % 2 == 0)
num = array[i];
}
//сортування по спаданню
for (int i = 0; i < array.Length; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[i] < array[j])
{
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
}
}
}
Console.WriteLine();
foreach (int x in array)
Console.Write(x + " ");
Console.ReadKey();
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Довольно просто. Нужно запомнить не число,а его индекс idx = i;
Обратите внимание на значение по умолчанию - я сделал так, что если не будет ни одного чётного отрицательного - сортировать весь массив, но может быть, подразумевается, что в этом случае ничего не сортировать, тогда сделайте int idx = array.Length;
И обход с конца (ради экономии).
int idx = -1;
for (int i = array.Length-1; i>=0; i--)
{
if (array[i] < 0 && array[i] % 2 == 0) {
idx = i;
break;
}
}
А теперь сортируем с нужного места int i = idx + 1
for (int i = idx + 1; i < array.Length; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[i] < array[j])
{
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
}
}
}