c#如何实现最简洁的快速排序

  介绍

这篇文章主要介绍c#如何实现最简洁的快速排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>快速排序算法说明:

原始数L1组,从中任意选择一个基准数F(一般选择第1个),小于F的数据放在F的左边记为数组minList,大于F的数据放在F的右边记为数组maxList。那么

L1=minList + F + maxList

然后对minList和maxList再做这样的操作,直到minList和maxList中的元素个数为1或0者的时候停止

<强>一、c#网上目前最简洁的实现方式:

现在就是要进行算法的实现了,很明显,这里要用到一个叫递归的思想。我们知道编程语言知识工具,算法才是核心,但是不同的编程语言实现算法却有很大的不同(简洁程度)。目前网上对于c#的实现快速排序的方式有很多,简单查阅了一下,发现一般都要100行代码左右(c和c++的代码行数要少一些)。千找万找,终于找到了一个,贴出如下:

static  void 快速排序(ref  List< int>, num,, int 左,int 右)   ,{   if 才能;(left  & lt;,右)   {才能   int 才能;小姐:=,离开;   int 才能;j =,正确的;   int 才能;middle =, num[(时间+ left 右),/,2];   while 才能;(真正的)   {才能   ,,while (小姐:& lt;, right ,,, num[我],& lt;,中间),{,我+ +;};   ,,while  (0, j 的在,,,,,num [j],祝辞,中间),{,j,};   ,,if (小姐:==,j),打破;   ,,int  temp =, num[我];   ,,num[我],=,num [j];   ,,num [j],=,温度;   ,,if  (num[我],==,num [j]), j——;   ,,}   快速排序才能(ref  num,,,,我);   快速排序才能(ref  num,小姐:+,1,右);   ,,}   以前,}

但是说真的,很难读懂,真要在考场上写出这个代码,难保能一次写对。

<强>二,python的实现方式:

python我也有接触,所以当我用python写出这个算法的代码的时候,真的有种感觉,真是太TM简单了吧,有编程经验的同学应该也能看懂下面python的代码

def 快速排序(数组):,   ,if  len(数组),& lt;, 2:,,   return 才能;array  - - - - - -基线条件:为空或只包含一个元素的数组是“有序”的,   其他:,大敌;   pivot 才能=,阵列[0],- - - - - -递归条件   less 才能=,[小姐:for 小姐:拷贝数组(1:),if 小姐:& lt;=,主),- - - - - -由所有小于基准值的元素组成的子数组,,   greater 才能=,[小姐:for 小姐:拷贝数组(1:),if 小姐:祝辞,主),- - - - - -由所有大于基准值的元素组成的子数组,,   ,return 快速排序(更少),+,(主),+,快速排序(更大的),   print 快速排序([10日,5日,2,3])

短短几行代码,清晰明了。主要的代码就是数组可以直接相加运算:<代码>快速排序(少)+(主)+快速排序(更大的)

<强>三,c#自己实现最简易方式

那难道我们c#就只能写出难懂又多的代码才能实现吗?终于让我也找到了,下面贴出我自己写的c#代码:

public  class  Extend : List   ,{   public 才能;static  Extend  operator  + (Extend  L1, Extend  L2)   {才能   ,,L1.AddRange (L2);   ,,return  L1;   ,,}   ,}      static 才能;Extend  QuickSort2 (Extend  num)   {才能   ,,if  (nums.Count  & lt;, 2)   ,,{   ,,,return  num;   ,,}   其他的,,   ,,{   ,,,Extend  minList =, new 扩展();//小于基准数的集合   ,,,Extend  maxList =, new 扩展();//大于基准数的集合   ,,,int  f =, num [0];   ,,,for  (int 小姐:=,1;,小姐:& lt;, nums.Count;,我+ +)   ,,,{   ,,,,if  (num[我],& lt;=, f), minList.Add (num[我]);   ,,,,else  maxList.Add (num[我]);   ,,,}   ,,,return  QuickSort2 (minList), +, new 扩展(),{,f}, +, QuickSort2 (maxList);//递归,并且使用+运算符   ,,}   以前,,}

实际上就只有两步操作,就实现了和python一样的简洁!

第一:新建一个扩展类继承于List

第二:重写了+运算符

有同学对扩展类中的AddRange方法提出了内存上的质疑,我也进行了回复,算法是对时间复杂度的考察,也就是对过程的考察。内存消耗根据不同的代码肯定会有所不同,但是不影响算法。当然我也对扩展进行了改进,因为实际上最终的加法运算中,minList和maxList都只有一个元素,或者没有元素。

c#如何实现最简洁的快速排序