обратная сортировка выбором c#
Господа, подскажите как сделать обратную сортировку массива выбором.Вот обычная сортировка выбором:
public static void SelectionSort(int[] massiv)
{
if (massiv == null || massiv.Length < 2)
return;
for (int index = 0; index < massiv.Length; index++)
{
int minIndex = index;
for (int next = index + 1; next < massiv.Length; next++)
{
if (massiv[minIndex] > massiv[next])
minIndex = next;
if (minIndex != index)
{
int tmp = massiv[index];
massiv[index] = massiv[minIndex];
massiv[minIndex] = tmp;
}
}
}
}
Ответы (1 шт):
Автор решения: Andrei Khotko
→ Ссылка
Исправленный вариант вашего метода:
public static void SelectionSort(int[] massiv)
{
if (massiv == null || massiv.Length < 2)
return;
for (int index = 0; index < massiv.Length - 1; index++)
{
int minIndex = index;
for (int next = index + 1; next < massiv.Length; next++)
{
if (massiv[minIndex] > massiv[next])
minIndex = next;
}
int tmp = massiv[index];
massiv[index] = massiv[minIndex];
massiv[minIndex] = tmp;
}
}
В вашем варианте вы зачем-то делаете лишние перестановки внутри вложенного цикла. Сортировка выбором должна сначала находить минимальный элемент, а затем уже менять местами найденный элемент с текущим.
Чтобы поменять порядок сортировки на обратный, нужно поменять знак в условии if на противоположный, т.е. будет:
if (massiv[minIndex] < massiv[next])
Но при этом учтите, что имена переменных тоже желательно изменить (minIndex -> maxIndex).