Сортировка класса ArrayList особым способом - C#
Формулировка задачи:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Nomatter
{
class Program
{
static void Main(string[] args)
{
string temp;
bool done=false;
StreamReader inp = new StreamReader("C:\\Learning and stuff\\Input_N.txt",Encoding.Default);
temp = inp.ReadLine();
int num = Convert.ToInt32(temp);
ArrayList A = new ArrayList();
string New_Klichka;
for(int i=0;i<num;++i)
{
Sobaka temp_el = new Sobaka();
temp_el.Klichka= inp.ReadLine();
temp_el.Poroda = inp.ReadLine();
temp_el.Pol = inp.ReadLine();
temp_el.Vozrast =Convert.ToInt32( inp.ReadLine());
temp_el.Medalei =Convert.ToInt32( inp.ReadLine());
A.Add(temp_el);
}
PrintValues(A);
Console.WriteLine("После сортировки:");
A.Sort();
PrintValues(A);
Console.WriteLine("Введите имя искомой собаки:");
New_Klichka = Console.ReadLine();
for (int i = 0, j = num; i <=j &&!done; )
{
int ind = i + j / 2;
Sobaka temp1 = A[ind] as Sobaka;
switch( temp1.Klichka.CompareTo(New_Klichka))
{
case -1:
i = j / 2;
break;
case 0:
PrintSobaka(temp1);
done = true;
break;
case 1:
j = j / 2;
break;
}
}
if (!done)
Console.WriteLine("Этой собаки нет в списке");
Console.ReadKey();
}
private static void PrintSobaka(Sobaka B)
{
Console.Write(" {0}", B.Klichka.PadRight(10));
Console.Write(" {0}", B.Poroda.PadRight(10));
Console.Write(" {0}", B.Pol.PadRight(10));
Console.Write(" {0}", B.Vozrast);
Console.WriteLine(" {0}", B.Medalei);
}
private static void PrintValues(ArrayList A)
{
foreach(Sobaka B in A)
PrintSobaka(B);
}
}
}
class Sobaka:IComparable
{
public string Klichka;
public string Poroda;
public string Pol;
public int Vozrast;
public int Medalei;
public int CompareTo(object field)
{
Sobaka otherSobaka = field as Sobaka;
if (otherSobaka != null)
{
int res = this.Klichka.CompareTo(otherSobaka.Klichka);
if (res != 0)
return res;
else return this.Klichka.CompareTo(otherSobaka.Vozrast);
}
else throw new ArgumentException("Сравниваемое не является объектом класса Sobaka");
}
}Решение задачи: «Сортировка класса ArrayList особым способом»
textual
Листинг программы
public void InsertionSort(Sobaka[] array, IComparer<Sobaka> comparer)
{
for (int i = 1; i < array.Length; i++)
{
Sobaka cur = array[i];
int j = i;
while (j > 0 && comparer.Compare(cur, array[j - 1]) < 0)
{
array[j] = array[j - 1];
j--;
}
array[j] = cur;
}
}