博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#-快速排序-算法
阅读量:6610 次
发布时间:2019-06-24

本文共 1541 字,大约阅读时间需要 5 分钟。

 

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

步骤为:
1.从数列中挑出一个元素,称为 "基准"(pivot),
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
 

平均时间复杂度 \Theta(n\log n)

 

 快速排序通常明显比其他Ο(n log n) 算法更快

快速排序

public static void Sort(int[] numbers)        {            QuickSort(numbers, 0, numbers.Length - 1);        }        private static void QuickSort(int[] numbers, int left, int right)        {            if (left < right)            {                int middle = numbers[(left + right) / 2];                int i = left - 1;                int j = right + 1;                while (true)                {                    while (numbers[++i] < middle) ;                    while (numbers[--j] > middle) ;                    if (i >= j)                        break;                    Swap(numbers, i, j);                }                QuickSort(numbers, left, i - 1);                QuickSort(numbers, j + 1, right);            }        }        private static void Swap(int[] numbers, int i, int j)        {            int number = numbers[i];            numbers[i] = numbers[j];            numbers[j] = number;        }

  

调用:

int[] y = new int[] {4,8,2222,2,1,121,13,434,56,1111,65,7,8 };  Sort(y);  foreach (var item in y)  {      Console.WriteLine(item);  } // 1 2 4 7 8 8 13 56 65 121 434 1111 2222

  

转载于:https://www.cnblogs.com/zengxiangzhan/p/3305296.html

你可能感兴趣的文章
no identities are available for signing
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
Gradle脚本基础全攻略
查看>>
Django模版中的过滤器详细解析 Django filter大全
查看>>
Linux中使用pwconv实现passwd中密码到shadow
查看>>
Visual Studio 2017各版本安装包离线下载
查看>>
C#线程安全的那些事
查看>>
【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
查看>>
rpm安装PostgreSQL
查看>>
k sum(lintcode)
查看>>
Android 控件属性
查看>>
【244】◀▶IEW-Unit09
查看>>
Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
查看>>
用任务计划管理计划任务对付任务计划-禁止WPS提示升级
查看>>
Android——SlidingMenu学习总结
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
UI概念体系要素
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
performSelectorInBackground V.S detachNewThreadSelector?
查看>>
linux,Centos,bash: service: command not found
查看>>