using System;
using System.Collections;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
List<Person> list = new List<Person>()
{
new Person("Adrian", "Abramowicz"),
new Person("Krzysiek", "Abramowicz"),
new Person("Krzysiek", "Kowalski"),
new Person("Marian", "Zawada")
};
BubbleSort(list);
foreach(Person p in list)
Console.WriteLine(p.Surname + " " + p.Name);
}
public static void BubbleSort(List<Person> list)
{
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list.Count - 1; j++)
{
if (list[j] > list[j+1])
{
Person temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
}
}
public class Person : IComparable, IComparable<Person>
{
public Person(string name, string surname)
{
Name = name;
Surname = surname;
}
public string Name {get; private set;}
public string Surname {get; private set;}
public override int GetHashCode()
{
return Name.GetHashCode() ^ Surname.GetHashCode();
}
public override bool Equals(Object obj)
{
Person other = obj as Person;
return Equals(other);
}
public bool Equals(Person other)
{
if (object.ReferenceEquals(other, null))
return false;
if (!Surname.Equals(other.Surname))
return false;
if (!Name.Equals(other.Name))
return false;
return true;
}
public int CompareTo(object obj)
{
Person other = obj as Person;
return CompareTo(other);
}
public int CompareTo(Person other)
{
if (object.ReferenceEquals(other, null))
return 1;
int result = string.Compare(this.Surname, other.Surname, StringComparison.OrdinalIgnoreCase);
if (result == 0)
result = string.Compare(this.Name, other.Name, StringComparison.OrdinalIgnoreCase);
return result;
}
public static int Compare(Person left, Person right)
{
if (object.ReferenceEquals(left, right))
return 0;
if (object.ReferenceEquals(left, null))
return -1;
int result = string.Compare(left.Surname, right.Surname, StringComparison.OrdinalIgnoreCase);
if (result == 0)
result = string.Compare(left.Name, right.Name, StringComparison.OrdinalIgnoreCase);
return result;
}
public static bool operator < (Person left, Person right)
{
return (Compare(left, right) < 0);
}
public static bool operator > (Person left, Person right)
{
return (Compare(left, right) > 0);
}
}