QuickSort GoOver 2 多线程

多线程下的快排:

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

排序过程结构
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部分
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,284评论 25 708
  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,673评论 2 17
  • 一阵风,一阵雨,迎来2016的冬天,一夜之间,满地的落叶。早晨起来,看见大家都穿上了厚厚的衣服。气温急剧下降,冷的...
    望旺520阅读 225评论 0 0
  • 在这秋天 我再次走远 肩上扛的 是收获 也是沉甸甸的 眷恋 风啊 你不要催 让我再回头看看 不管我身后的送别 仍聚...
    本无痕阅读 496评论 63 83