快速排序算法是我經常使用的算法,所以也寫成了泛型了,省事,不用為每個類型去寫個特定的算法了。
排序的對象是實現了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);
}
}
}
}