Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x - C#
Формулировка задачи:
Вот само задание: Описать процедуру sort(x), упорядочивающую по неубыванию числа массива x следующим методом: все числа из x упорядочить по последней цифре и перенести во вспомогательный массив y; затем числа из y упорядочить по предпоследней цифре (при равенстве этих цифр сохранять упорядоченность по последней цифре) и записать их снова в массив x; далее числа из x упорядочить по третьей от конца цифре и перенести в массив y и т.д. (Учесть, что в конце концов числа должны оказаться в x).
Вот код: Проблема возникла, когда цифры совпадают и он не сортирует по предыдущей цифре, хотел проблему решить так Но не получилось, помогите пожалуйста с этим. О массива cop, в 0 строку записываются числа, в строку 1 записывается целое число от деления на 10, в строку 2 записывается остаток от деления на 0. Заранее спасибо.
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; } }
Решение задачи: «Описать процедуру 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д