Сортировка класса ArrayList особым способом - C#

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

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

Листинг программы
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace Nomatter
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. string temp;
  15. bool done=false;
  16. StreamReader inp = new StreamReader("C:\\Learning and stuff\\Input_N.txt",Encoding.Default);
  17. temp = inp.ReadLine();
  18. int num = Convert.ToInt32(temp);
  19. ArrayList A = new ArrayList();
  20. string New_Klichka;
  21. for(int i=0;i<num;++i)
  22. {
  23. Sobaka temp_el = new Sobaka();
  24. temp_el.Klichka= inp.ReadLine();
  25. temp_el.Poroda = inp.ReadLine();
  26. temp_el.Pol = inp.ReadLine();
  27. temp_el.Vozrast =Convert.ToInt32( inp.ReadLine());
  28. temp_el.Medalei =Convert.ToInt32( inp.ReadLine());
  29. A.Add(temp_el);
  30. }
  31. PrintValues(A);
  32. Console.WriteLine("После сортировки:");
  33. A.Sort();
  34. PrintValues(A);
  35. Console.WriteLine("Введите имя искомой собаки:");
  36. New_Klichka = Console.ReadLine();
  37. for (int i = 0, j = num; i <=j &&!done; )
  38. {
  39. int ind = i + j / 2;
  40. Sobaka temp1 = A[ind] as Sobaka;
  41. switch( temp1.Klichka.CompareTo(New_Klichka))
  42. {
  43. case -1:
  44. i = j / 2;
  45. break;
  46. case 0:
  47. PrintSobaka(temp1);
  48. done = true;
  49. break;
  50. case 1:
  51. j = j / 2;
  52. break;
  53. }
  54. }
  55. if (!done)
  56. Console.WriteLine("Этой собаки нет в списке");
  57. Console.ReadKey();
  58. }
  59. private static void PrintSobaka(Sobaka B)
  60. {
  61. Console.Write(" {0}", B.Klichka.PadRight(10));
  62. Console.Write(" {0}", B.Poroda.PadRight(10));
  63. Console.Write(" {0}", B.Pol.PadRight(10));
  64. Console.Write(" {0}", B.Vozrast);
  65. Console.WriteLine(" {0}", B.Medalei);
  66. }
  67. private static void PrintValues(ArrayList A)
  68. {
  69. foreach(Sobaka B in A)
  70. PrintSobaka(B);
  71. }
  72. }
  73. }
  74. class Sobaka:IComparable
  75. {
  76. public string Klichka;
  77. public string Poroda;
  78. public string Pol;
  79. public int Vozrast;
  80. public int Medalei;
  81. public int CompareTo(object field)
  82. {
  83. Sobaka otherSobaka = field as Sobaka;
  84. if (otherSobaka != null)
  85. {
  86. int res = this.Klichka.CompareTo(otherSobaka.Klichka);
  87. if (res != 0)
  88. return res;
  89. else return this.Klichka.CompareTo(otherSobaka.Vozrast);
  90. }
  91. else throw new ArgumentException("Сравниваемое не является объектом класса Sobaka");
  92. }
  93. }
Нужно сортировать список по полю Klichka методом простых вставок. Причём это нужно сделать через IComparer, как обращаться к полям внутри этого метода?

Решение задачи: «Сортировка класса ArrayList особым способом»

textual
Листинг программы
  1.         public void InsertionSort(Sobaka[] array, IComparer<Sobaka> comparer)
  2.         {
  3.             for (int i = 1; i < array.Length; i++)
  4.             {
  5.                 Sobaka cur = array[i];
  6.                 int j = i;
  7.                 while (j > 0 && comparer.Compare(cur, array[j - 1]) < 0)
  8.                 {
  9.                     array[j] = array[j - 1];
  10.                     j--;
  11.                 }
  12.                 array[j] = cur;
  13.             }
  14.         }

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


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

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

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы