首先说明以下代码为C#的快排实现,想他致敬,由于我的业务和他有所出入所以做了部分修改。
http://developer.51cto.com/art/201403/430986.htm
我的需求是将字符串长度长的放到列表的前端,短的放后面,不需要特别准确的排序:
/// <summary>
/// 递归实现快速排序
/// </summary>
/// <param name="arrNums">输入链表</param>
/// <param name="left">左标</param>
/// <param name="right">右标</param>
private static void SortArray(ArrayList arrNums, int left, int right)
{
int m = left;
int n = right;
if (left > right)
return;
int iKey = arrNums[left].ToString().Length;
string strKey = arrNums[left].ToString();
while (n > m)
{
// 找到一个比我大的值
while (arrNums[n].ToString().Length <= iKey && n > m)
n--;
// 找到一个比我小的值
while (arrNums[m].ToString().Length >= iKey && n > m)
m++;
if (n > m)
{
string strtemp = arrNums[n].ToString();
arrNums[n] = arrNums[m];
arrNums[m] = strtemp;
}
}
arrNums[left] = arrNums[n];
arrNums[n] = strKey;
SortArray(arrNums, left, n - 1 );
SortArray(arrNums, n + 1, right);
}
原理请看链接的大哥的说明。