Сортировка шести чисел от большего к меньшему минимальным количеством перестановок - 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы