как отсортировать часть одномерного массива после определенного элемента?

не знаю как записать, чтобы сортировались только элементы после последнего отрицательного, кратного двум числа (сортировка элементов по убыванию)

            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;
                    }
                }               
        }            
→ Ссылка