这篇文章主要介绍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#如何实现最简洁的快速排序