**泛型 List 排序的实现**
==========================在 C# 中,泛型 `List` 是一个非常常用的集合类。然而,在某些情况下,我们可能需要对其元素进行排序。虽然 .NET Framework 提供了多种排序算法,但我们可以通过编写自己的泛型类来实现自定义的排序逻辑。
**泛型 List 排序接口**
----------------------
首先,让我们定义一个泛型接口,用于描述我们的排序类:
csharppublic interface ISortableList
{
void Sort();
}
这个接口仅包含一个 `Sort()` 方法,用于对列表中的元素进行排序。
**快速排序算法**
-----------------
下面,我们将实现一个基于快速排序(QuickSort)的泛型类,来对 `List` 进行排序:
csharppublic class QuickSortList : ISortableList
{
private List list;
public QuickSortList(List list)
{
this.list = list;
}
public void Sort()
{
// 使用快速排序算法对列表进行排序 QuickSort(list,0, list.Count -1);
}
private void QuickSort(List list, int left, int right)
{
if (left < right)
{
int pivotIndex = Partition(list, left, right);
// 递归地对左半部分和右半部分进行排序 QuickSort(list, left, pivotIndex -1);
QuickSort(list, pivotIndex +1, right);
}
}
private int Partition(List list, int left, int right)
{
T pivot = list[left];
int i = left +1;
int j = right;
while (i <= j)
{
// 从左半部分找到一个比 pivot 大的元素 while (i <= j && Compare(list[i], pivot) < 0)
i++;
// 从右半部分找到一个比 pivot 小的元素 while (i <= j && Compare(list[j], pivot) >0)
j--;
if (i <= j)
{
Swap(list, i, j);
i++;
j--;
}
}
return j;
}
private void Swap(List list, int i, int j)
{
T temp = list[i];
list[i] = list[j];
list[j] = temp;
}
private int Compare(T x, T y)
{
// 比较两个元素的大小 return Comparer.Default.Compare(x, y);
}
}
这个泛型类 `QuickSortList` 实现了 `ISortableList` 接口,提供了一个 `Sort()` 方法来对列表中的元素进行排序。它使用快速排序算法,对列表进行排序。
**测试**
------
下面,我们将编写一些测试代码,来验证我们的泛型类是否正确:
csharp[TestMethod]
public void TestQuickSortList()
{
List<int> list = new List<int>() {5,2,8,3,1,6,4 };
QuickSortList<int> quickSortList = new QuickSortList<int>(list);
quickSortList.Sort();
CollectionAssert.AreEqual(new int[] {1,2,3,4,5,6,8 }, list);
}
[TestMethod]
public void TestQuickSortList_DuplicateElements()
{
List<int> list = new List<int>() {5,2,8,3,1,6,4,2,8 };
QuickSortList<int> quickSortList = new QuickSortList<int>(list);
quickSortList.Sort();
CollectionAssert.AreEqual(new int[] {1,2,2,3,4,5,6,8,8 }, list);
}
这些测试代码验证了我们的泛型类是否正确地对列表中的元素进行排序。
**结论**
------
在本文中,我们实现了一个泛型类 `QuickSortList`,来对 `List` 进行快速排序。这个泛型类提供了一个 `Sort()` 方法,用于对列表中的元素进行排序。我们编写了一些测试代码,来验证我们的泛型类是否正确。