Сортировка шести чисел от большего к меньшему минимальным количеством перестановок - C#
Формулировка задачи:
Шесть чисел (4 6 7 2 3 5) нужно отсортировать от большего к меньшему минимальным количеством перестановок.
есть три перестановки
1) меняются 1-4 становятся задом на перед (2 7 6 4 3 5)
2) меняются 2-5 становятся задом на перед (4 3 2 7 6 5)
3) меняются 3-6 становятся задом на перед (4 6 5 3 2 7)
Как организовать логику программы? что бы находило минимальное количество перестановок... У меня программа зацикливается... Идет тупо рандомный перебор ...
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace military { class Program { static int n = 6; static int buf = 6; static int[] solder = new int[6]; static int[] solder_no = new int[6]; static Random zapusk = new Random(); static void func_1() { /*Console.WriteLine(" "); for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); } Console.WriteLine(" ");*/ int memory; memory = solder_no[3]; solder_no[3] = solder_no[0]; solder_no[0] = memory; memory = solder_no[2]; solder_no[2] = solder_no[1]; solder_no[1] = memory; /*for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); }*/ } static void func_2() { /*Console.WriteLine(" "); for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); } Console.WriteLine(" ");*/ int memory; memory = solder_no[4]; solder_no[4] = solder_no[1]; solder_no[1] = memory; memory = solder_no[3]; solder_no[3] = solder_no[2]; solder_no[2] = memory; /*for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); }*/ } static void func_3() { /*Console.WriteLine(" "); for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); } Console.WriteLine(" ");*/ int memory; memory = solder_no[5]; solder_no[5] = solder_no[2]; solder_no[2] = memory; memory = solder_no[4]; solder_no[4] = solder_no[3]; solder_no[3] = memory; /*for (int i = 0; i < n; i++) { Console.Write(solder_no[i] + " "); }*/ } static void enter_solder() { for (int i = 0; i < n; i++) { try { Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("число " + (i + 1) + ""); solder[i] = Convert.ToInt32(Console.ReadLine()); solder_no[i] = solder[i]; Console.Clear(); if (solder[i] >= 250) { Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("число больше допустимого."); i = i - 1; } } catch { Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("это не число."); i = i - 1; } } } static void sort() { for (int k = n - 1; k > 0; k--) for (int i = 0; i < k; i++) if (solder[i] < solder[i + 1]) { buf = solder[i]; solder[i] = solder[i + 1]; solder[i + 1] = buf; } for (int i = 0; i < n; i++) Console.Write(solder[i]+ " "); Console.ReadKey(); } static void progs() { for (int i = 0; i < n; i++) if (Array.Equals(solder, solder_no)) { i = 6; for (int j = 0; j < n; j++) { Console.WriteLine("solder_no[j]"); } } else { i = i - 1; switch (zapusk.Next(0, 3)) { case 0: Console.WriteLine("1");Ut func_1(); break; case 1: Console.WriteLine("2"); func_2(); break; case 2: Console.WriteLine("3"); func_3(); break; } } Console.ReadKey(); } static void Main(string[] args) { enter_solder(); sort(); Console.Clear(); progs(); } } }
Решение задачи: «Сортировка шести чисел от большего к меньшему минимальным количеством перестановок»
textual
Листинг программы
using System; namespace AdvSort { class Exec { static int IndexOfMax(int[] buffer, int offset, int count) { var result = offset; var max = buffer[result]; for (var i = offset + 1; i < offset + count; i++) if (buffer[i] >= max) { result = i; max = buffer[i]; } return result; } static void Swap(ref int a, ref int b) { int c = a; a = b; b = c; } static int SwapSort(int[] buffer) { var replCount = 0; int maxIndex; for (var i = 0; i < buffer.Length - 1; i++) { maxIndex = IndexOfMax(buffer, i + 1, buffer.Length - i - 1); if (buffer[maxIndex] > buffer[i]) { Swap(ref buffer[i], ref buffer[maxIndex]); replCount++; } } return replCount; } static int Main(string[] args) { int[] arr = { 2, 1, 2, 2}; int replCount = SwapSort(arr); Console.WriteLine("Выполнено {0} swap операций.", replCount); Console.ReadKey(); return 0; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д