快速排序算法是我经常使用的算法,所以也写成了泛型了,省事,不用为每个类型去写个特定的算法了。
排序的对象是实现了IList接口的集合。
我已经发了一个查找类,经常都要一起使用的。
using
System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CommonLibrary
... {
/**//// <summary>
/// Sorter 排序类
/// </summary>
public class Sorter
...{
/**//// <summary>
/// 两个值的比较委托
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="value1">值1</param>
/// <param name="value2">值2</param>
/// <returns>返回值,值1大于值2返回1,值1小于值2返回-1,值1等于值2返回0</returns>
public delegate int Compare<T>(T value1, T value2);
/**//// <summary>
/// 二分排序法
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="myList">要进行排序的集合</param>
/// <param name="myCompareMethod">两个值的比较方法</param>
public static void DimidiateSort<T>(IList<T> myList, Compare<T> myCompareMethod)
...{
DimidiateSort<T>(myList, 0, myList.Count-1, myCompareMethod);
}
/**//// <summary>
/// 二分排序法
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="myList">要进行排序的集合</param>
/// <param name="left">起始位置</param>
/// <param name="right">结束位置</param>
/// <param name="myCompareMethod">两个值的比较方法</param>
public static void DimidiateSort<T>(IList<T> myList, int left, int right, Compare<T> myCompareMethod)
...{
if (left < right)
...{
T s = myList[(right + left) / 2];
int i = left - 1;
int j = right + 1;
T temp = default(T);
while (true)
...{
do
...{
i++;
}
while (i < right && myCompareMethod(myList[i], s) == -1);
do
...{
j--;
}
while (j > left && myCompareMethod(myList[j], s) == 1);
if (i >= j)
break;
temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
DimidiateSort(myList, left, i - 1, myCompareMethod);
DimidiateSort(myList, j + 1, right, myCompareMethod);
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CommonLibrary
... {
/**//// <summary>
/// Sorter 排序类
/// </summary>
public class Sorter
...{
/**//// <summary>
/// 两个值的比较委托
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="value1">值1</param>
/// <param name="value2">值2</param>
/// <returns>返回值,值1大于值2返回1,值1小于值2返回-1,值1等于值2返回0</returns>
public delegate int Compare<T>(T value1, T value2);
/**//// <summary>
/// 二分排序法
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="myList">要进行排序的集合</param>
/// <param name="myCompareMethod">两个值的比较方法</param>
public static void DimidiateSort<T>(IList<T> myList, Compare<T> myCompareMethod)
...{
DimidiateSort<T>(myList, 0, myList.Count-1, myCompareMethod);
}
/**//// <summary>
/// 二分排序法
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="myList">要进行排序的集合</param>
/// <param name="left">起始位置</param>
/// <param name="right">结束位置</param>
/// <param name="myCompareMethod">两个值的比较方法</param>
public static void DimidiateSort<T>(IList<T> myList, int left, int right, Compare<T> myCompareMethod)
...{
if (left < right)
...{
T s = myList[(right + left) / 2];
int i = left - 1;
int j = right + 1;
T temp = default(T);
while (true)
...{
do
...{
i++;
}
while (i < right && myCompareMethod(myList[i], s) == -1);
do
...{
j--;
}
while (j > left && myCompareMethod(myList[j], s) == 1);
if (i >= j)
break;
temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
DimidiateSort(myList, left, i - 1, myCompareMethod);
DimidiateSort(myList, j + 1, right, myCompareMethod);
}
}
}
}