排序算法:快速排序

来源:互联网 发布:淘宝收获地址怎么改 编辑:程序博客网 时间:2024/05/21 05:18

排序算法:快速排序

基本思想:

1.取基数:从数列中取一个数作为基数
2.分区:将大于基数的数放到他的右边,小于等于基数的数放到左边
3.再对左右区间(以步骤2基数位置产生的左右区间)重复第二步,直到各区间只有一个数

代码示例

详细代码参考文章底部 Github源码

 public void QuickSort2(List<int> list, int left, int right) {     if (left < right)     {         int L = left, R = right;         int baseNum = list[L];         while (L < R)         {             while (L < R && list[R] > baseNum)                 R--;             list[L] = list[R];             while (L < R && list[L] <= baseNum)                 L++;             list[R] = list[L];         }         list[L] = baseNum;         QuickSort2(list, left, L - 1);         QuickSort2(list, L + 1, right);     } }

调用:

  #region 快速排序实例  for (int i = 0; i < testCount; i++)  {      Stopwatch watch = new Stopwatch();      watch.Start();      var result = list.OrderBy(a => a).ToList();      watch.Stop();      Console.WriteLine($"第{i + 1}次,框架自带快速排序 {count}个数耗时:{watch.ElapsedMilliseconds}ms");      Console.WriteLine("输出前是十个数:" + string.Join(",", result.Take(10).ToList()));      watch = new Stopwatch();      watch.Start();      quick.QuickSort2(list, 0, list.Count - 1);      watch.Stop();      Console.WriteLine($"第{i + 1}次,快速排序 {count}个数耗时:{watch.ElapsedMilliseconds}ms");      Console.WriteLine("输出前是十个数:" + string.Join(",", list.Take(10).ToList()));      Console.WriteLine("************************");  }   #endregion

结果:

这里写图片描述

附:

源码: Github

参考:
白话经典算法系列之六 快速排序 快速搞定

图解快速排序

算法系列15天速成——第一天 七大经典排序【上】

原创粉丝点击