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

}

}

}

}