QuickSort GoOver 2 多线程

多线程下的快排:

每轮产生的新分区用新线程执行排序过程。

QuickSort GoOver 2 多线程_第1张图片
排序过程结构
C#实现过程:
public class QuickSort
{
    public List list = null;
    public DateTime dd;
    public QuickSort(List 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部分
    }
}

你可能感兴趣的:(QuickSort GoOver 2 多线程)