网站建设资讯

NEWS

网站建设资讯

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

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

创新互联长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为噶尔企业提供专业的网站制作、成都网站制作,噶尔网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

快速排序算法说明:

原始数组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 QuickSort(ref List nums, int left, int right)
 {
  if (left < right)
  {
  int i = left;
  int j = right;
  int middle = nums[(left + right) / 2];
  while (true)
  {
   while (i < right && nums[i] < middle) { i++; };
   while (j > 0 && nums[j] > middle) { j--; };
   if (i == j) break;
   int temp = nums[i];
   nums[i] = nums[j];
   nums[j] = temp;
   if (nums[i] == nums[j]) j--;
  }
  QuickSort(ref nums, left, i);
  QuickSort(ref nums, i + 1, right);
  }
 }

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

二、python的实现方式:

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

def quicksort(array): 
 if len(array) < 2:  
  return array ------基线条件:为空或只包含一个元素的数组是“有序”的 
 else:  
  pivot = array[0] ------递归条件
  less = [i for i in array[1:] if i <= pivot] ------由所有小于基准值的元素组成的子数组  
  greater = [i for i in array[1:] if i > pivot] ------由所有大于基准值的元素组成的子数组  
 return quicksort(less) + [pivot] + quicksort(greater) 
print quicksort([10, 5, 2, 3])

短短几行代码,清晰明了。主要的代码就是数组可以直接相加运算:quicksort(less) + [pivot] + quicksort(greater)

三、C#自己实现最简易方式

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

public class Extend :List
 {
  public static Extend operator +(Extend L1, Extend L2)
  {
   L1.AddRange(L2);
   return L1;
  }
 }

  static Extend QuickSort2(Extend nums)
  {
   if (nums.Count < 2)
   {
    return nums;
   }
   else
   {
    Extend minList = new Extend();//小于基准数的集合
    Extend maxList = new Extend();//大于基准数的集合
    int f = nums[0];
    for (int i = 1; i < nums.Count; i++)
    {
     if (nums[i] <= f) minList.Add(nums[i]);
     else maxList.Add(nums[i]);
    }
    return QuickSort2(minList) + new Extend() { f} + QuickSort2(maxList);//递归,并且使用+运算符
   }
  }

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

第一:新建一个Extend 类继承于List

第二:重写了+运算符

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

public class Extend :List
 {
  private static Extend k = new Extend();
  
  public static Extend operator +(Extend L1, Extend L2)
  {
   if (L1.Count == 1) k.Add(L1[0]);
   if (L2.Count == 1) k.Add(L2[0]);
   return k;
   //L1.AddRange(L2);
   //return L1;
  }
 }

其余的和python的代码基本一致,代码清晰明了。

据我观察,c#通过我这种方式实现的,目前独此一份,收好不谢!最后我还是要吐槽一句,怪不得python现在这么火,代码真的简单。但是最为程序员,我们始终要记住,语言只是工具,我们才是语言的主宰。了解代码背后的思想才是王道!

C#是什么

C#是一个简单、通用、面向对象的编程语言,它由微软Microsoft开发,继承了C和C++强大功能,并且去掉了一些它们的复杂特性,C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程从而成为.NET开发的首选语言,但它不适用于编写时间急迫或性能非常高的代码,因为C#缺乏性能极高的应用程序所需要的关键功能。

以上是“c#如何实现最简洁的快速排序”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


文章标题:c#如何实现最简洁的快速排序
分享路径:http://njwzjz.com/article/jjpgch.html