Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x - C#

Узнай цену своей работы

Формулировка задачи:

Вот само задание: Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x следующим методом: все числа из x упорядочить по последней цифре и перенести во вспомогательный массив y; затем числа из y упорядочить по предпоследней цифре (при равенстве этих цифр сохранять упорядоченность по последней цифре) и записать их снова в массив x; далее числа из x упорядочить по третьей от конца цифре и перенести в массив y и т.д. (Учесть, что в конце концов числа должны оказаться в x). Вот код:
static int[] mas = { 132, 321, 123, 213,231 , 312 };
        static int[] x = new int[mas.Length];
        static int[] y = new int[mas.Length];
        static int maxцифрвчисле = new int();
        #region Вывод
        static void V(int[,] cop)
        {
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[0, i] + "\t");
            }
            Console.WriteLine();
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[1, i] + "\t");
            }
            Console.WriteLine();
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(cop[2, i] + "\t");
            }
            Console.WriteLine();
        }
        #endregion
        /*
         * По убыванию
         * 16.Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x следующим методом: все числа из x упорядочить по 
         * последней цифре и перенести во вспомогательный массив y; затем числа из y упорядочить по предпоследней цифре (при равенстве этих 
         * цифр сохранять упорядоченность по последней цифре) и записать их снова в массив x; далее числа из x упорядочить по третьей от конца 
         * цифре и перенести в массив y и т.д. (Учесть, что в конце концов числа 
         * должны оказаться в x).
         */
        static void Main(string[] args)
        {
            Console.WriteLine(123 / 10%10);
            int[,] cop = new int[3, mas.Length];
            for(int i=0; i<mas.Length; i++)
            {
                    cop[0,i]=mas[i];
                    cop[1, i] = mas[i] / 10;
                    cop[2, i] = mas[i]%10;
                    if (mas[i].ToString().Length > maxцифрвчисле)
                        maxцифрвчисле = mas[i].ToString().Length;
            }
            #region Сортировка по последней цифре
            int temp;
            for (int z = 0; z < maxцифрвчисле; z++)
            {
                for (int j = 0; j < mas.Length; j++)
                {
                    for (int i = 0; i < mas.Length; i++)
                    {
                        if (i == j)
                            break;
                        if (cop[2, i] < cop[2, j])
                        {
                            temp = cop[2, i];
                            cop[2, i] = cop[2, j];
                            cop[2, j] = temp;
                            temp = cop[0, i];
                            cop[0, i] = cop[0, j];
                            cop[0, j] = temp;
                            temp = cop[1, i];
                            cop[1, i] = cop[1, j];
                            cop[1, j] = temp;
                            V(cop);
                        }
                        int io = 1;
                        if (cop[2, i] == cop[2, j])
                        {
                            for (int p = z; p >= 0; p--)
                                io *= 10;
                            if (cop[0, j] / io % io < cop[0, i] / io % io && cop[1, i].ToString().Length!=2)
                            {
                                temp = cop[2, i];
                                cop[2, i] = cop[2, j];
                                cop[2, j] = temp;
                                temp = cop[0, i];
                                cop[0, i] = cop[0, j];
                                cop[0, j] = temp;
                                temp = cop[1, i];
                                cop[1, i] = cop[1, j];
                                cop[1, j] = temp;
                            }
                        }
                    }
                }
                Console.WriteLine();
                for (int i = 0; i < mas.Length;i++ )
                {
                    cop[1, i] /= 10;
                    cop[2, i] = cop[1, i] % 10;
                }
                V(cop);
            }
            #endregion
            //Запись в y
            for (int i = 0; i < mas.Length; i++)
                y[i] = cop[0, i];
            Console.ReadKey(true);
            }
Проблема возникла, когда цифры совпадают и он не сортирует по предыдущей цифре, хотел проблему решить так
int io = 1;
                        if (cop[2, i] == cop[2, j])
                        {
                            for (int p = z; p >= 0; p--)
                                io *= 10;
                            if (cop[0, j] / io % io < cop[0, i] / io % io && cop[1, i].ToString().Length!=2)
                            {
                                temp = cop[2, i];
                                cop[2, i] = cop[2, j];
                                cop[2, j] = temp;
                                temp = cop[0, i];
                                cop[0, i] = cop[0, j];
                                cop[0, j] = temp;
                                temp = cop[1, i];
                                cop[1, i] = cop[1, j];
                                cop[1, j] = temp;
                            }
                        }
Но не получилось, помогите пожалуйста с этим. О массива cop, в 0 строку записываются числа, в строку 1 записывается целое число от деления на 10, в строку 2 записывается остаток от деления на 0. Заранее спасибо.

Решение задачи: «Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication7
{
    class Arrays
    {
        public void Sort(int[] x)
        {
            Console.WriteLine("Исходный массив X:");
            PrintArray(x);
            int[] y = x;
            Array.Sort(y, new MyClass());
            Console.WriteLine("Массив Y:");
            PrintArray(y);
            x = y;
            Array.Sort(x, new MyClass2());
            Console.WriteLine("Массив X:");
            PrintArray(x);
            Console.WriteLine("Массив Y:");
            y = x;
            Array.Sort(y,new MyClass3());
            PrintArray(y);
        }
 
        private void PrintArray(IEnumerable<int> array)
        {
            foreach (var a in array)
            {
                Console.Write(a + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
        }
 
    }
    sealed class MyClass : IComparer<int>
    {
        public int Compare(int x, int y)
        {
            int l = x % 10;
            int l1 = y % 10;
            if (l == l1)
                return 0;
            if (l < l1)
                return -1;
            return 1;
        }
    }
 
    sealed class MyClass2 : IComparer<int>
    {
        public int Compare(int x, int y)
        {
            int r = x / 10 % 10;
            int r2 = y / 10 % 10;
 
            if (r < r2)
                return -1;
            if (r > r2)
                return 1;
 
            int l = x % 10;
            int l1 = y % 10;
            if (l == l1)
                return 0;
            if (l < l1)
                return -1;
            return 1;
 
        }
    }
 
    sealed class MyClass3 : IComparer<int>
    {
        public int Compare(int x, int y)
        {
            int l = x / 100;
            int l1 = y / 100;
 
            if (l == l1)
                return 0;
            if (l < l1)
                return -1;
            return 1;
 
        }
    }
 
    class Program
    {
 
        static void Main(string[] args)
        {
            var arr = new int[] { 123, 941, 228, 303, 494, 108 };
            new Arrays().Sort(arr);
            Console.ReadKey(true);
        }
    }
}

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


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

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

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