我有一个冒泡排序方法,我想将其转换为继承IComarer <object>接口的其他类以创建新的排序方法

时间:2018-11-29 22:37:22

标签: c# sorting bubble-sort

因此,我有一个“可交付成果”类,其中包含有关包裹信息和买方信息的信息。 每个买家都有他的街道和门牌号。

public Person(int id, String name, String street, int housenumber, String, postalcode, String city)

在人的构造函数之上。

public Deliverable(int id, int weight, Person buyer)

可交付成果的构造函数之上。

我还有另一个课程来存储可交付成果和人员

public TransportCompany(){
this.myPersons = new List<Person>();
this.myDeliverables = new List<Deliverable>();
}

因此,我有一种使用Bubble排序方法对myDeliverables进行排序的方法,即按照街道名称的升序(如果名称相同,然后按房屋的升序(奇数)然后按偶数房子的降序)对列表进行排序数字。 这是一个示例:

-Id:3,重量:360,应在以下地址提供:RedNex-AAstraat 166-5688BX埃因霍温。

-Id:2,体重:700,应在以下地址提供:Adele-Kerkstraat 13-5688DE Eindhoven。

-Id:4,体重:360,应该在以下地点提供:布鲁诺·马尔斯(Bruno Mars)-Kerkstraat 39-5688DE埃因霍温。

-Id:6,体重:900,应在以下地点运送:艾琳·韦斯特-埃克霍芬20-5693DE艾恩德霍芬。

-Id:12,重量:30,应在以下地点交付:Anouk-Kerkstraat 10-5693DE Eindhoven。

这是我正在使用的当前方法:

public void SortForPostman()
 {
 sortedlist = Deliverables.ToList();
 sortedlist1 = Deliverables.ToList();

 int N = sortedlist.Count;

 //Select the odd house numbers
 foreach (Deliverable s in sortedlist.ToList())
 {
 if (s.Buyer.Housenumber % 2 == 0)
 {
 sortedlist.Remove(s);

 }
 }
 oddsortedlist= sortedlist;


 //Select the even house numbers
 foreach (Deliverable s in sortedlist1.ToList())
 {
 if (s.Buyer.Housenumber % 2 != 0)
 {
 sortedlist1.Remove(s);

 }
 }

 evensortedlist = sortedlist1;



 int f, d;

 N = oddsortedlist.Count;
 //filter the odd numbered list
 for (d = N - 1; d > 0; d--)
 {
 for (f = 0; f < d; f++)
 {
 if (string.Compare((oddsortedlist[f].Buyer.Street), 
 (oddsortedlist[f + 1].Buyer.Street)) == 0)
 {
 if (oddsortedlist[f].Buyer.Housenumber > oddsortedlist[f 
 + 1].Buyer.Housenumber)

 {
 swapodd(f, f + 1);
 }
 }
 else if (string.Compare((oddsortedlist[f].Buyer.Street), 
 (oddsortedlist[f + 1].Buyer.Street)) > 0)
 {
 swapodd(f, f + 1);
 }
 }
 } 

 int q, w;
 N = evensortedlist.Count;

 for (w = N - 1; w > 0; w--)
 {
 for (q = 0; q < w; q++)
 {
 if (string.Compare((evensortedlist[q].Buyer.Street), 
 (evensortedlist[q + 1].Buyer.Street)) == 0)
 {
 if (evensortedlist[q].Buyer.Housenumber < 
 evensortedlist[q + 1].Buyer.Housenumber)

 {
 swapeven(q, q + 1);
 }
 }
 else if (string.Compare((evensortedlist[q].Buyer.Street), (evensortedlist[q + 1].Buyer.Street)) > 0)
 {
 swapeven(q, q + 1);
 }
 }
 }
 sortedlist = oddsortedlist.ToList();
 sortedlist.AddRange(evensortedlist.ToList());


 int x, j;

 N = sortedlist.Count;

 for (j = N - 1; j > 0; j--)
 {
 for (x = 0; x < j; x++)
 {
 if (string.Compare((sortedlist[x].Buyer.Street), (sortedlist[x + 1].Buyer.Street)) > 0)
 {
 swapdeliverable(x, x + 1);
 }
 }
 }


 }

 public void swapdeliverable(int m, int n)
 {
 Deliverable temporary;

 temporary = sortedlist[m];
 sortedlist[m] = sortedlist[n];
 sortedlist[n] = temporary;
 }

 public void swapodd(int m, int n)
 {
 Deliverable temporary;

 temporary = oddsortedlist[m];
 oddsortedlist[m] = oddsortedlist[n];
 oddsortedlist[n] = temporary;
 }
 public void swapeven(int m, int n)
 {
 Deliverable temporary;

 te tomporary = evensortedlist[m];
 evensortedlist[m] = evensortedlist[n];
 evensortedlist[n] = temporary;
 }

所以现在我想将此方法转移到对象IComparer <>

namespace Deliveries
 {
 class PostmanSort : IComparer<Deliverable>
 {
 public int Compare(Deliverable x, Deliverable y)
 {
 return // The method here 
 }
 }}

而不是使用以前的方法,我需要

 public void SortForPostman()
 {
 PostmanSort niceway= new PostmanSort();
 TheList.Sort(niceway);
 }

0 个答案:

没有答案