多线程下的快排:
每轮产生的新分区用新线程执行排序过程。
C#实现过程:
public class QuickSort
{
public List<int> list = null;
public DateTime dd;
public QuickSort(List<int> l)
{
list = l;
}
private delegate void qstd(int l, int r);
public void qst(int l, int r)
{
int i = l;
int j = r;
if (i >= j)//如果当前排序集合里面的元素个数小于2个则结束此分支的排序
{
Console.WriteLine((DateTime.Now - dd).TotalMilliseconds.ToString());
return;
}
int key = list[i];//以集合第一个元素作为界定值
while (i < j)//排序
{
while (i < j && list[j] >= key)//从后往前匹配第一个小于界定值key的值
{
j--;
}
list[i] = list[j];//将当前j位置的值放到i处
while (i < j && list[i] <= key)//从前往后匹配第一个大于界定值key的值
{
i++;
}
list[j] = list[i];//将当前i位置的值放到j处
}
list[i] = key;//这里完成
//以key为分界将数字集合分成两个集合 递归进行下一轮排序
lock (m)
{
m.total += 1;
}
Task.Factory.StartNew(() => { qst(l, i - 1); });//小于等于key部分
Task.Factory.StartNew(() => { qst(i + 1, r); }); //大于等于key部分
}
}