C# Array.sort排序

【前言】

C#视频的看到冒泡排序以后,小杨老师讲了一个更简单的排序方法,这个方法就是Array.Sort()函数,利用这个函数可直接对数组中的数字进行排序,比冒泡排序简单得多了,仅仅只需要一行代码,下面是代码和运行结果。

[csharp]  view plain  copy
 print ?
  1. int[] nums = new int[] { 2, 652, 32, 1, 6, 65 };  
  2. Array.Sort(nums);  
  3. //Array.Reverse(nums);//方法,反转  
  4.   
  5. for (int i = 0; i < nums.Length; i++)  
  6. {  
  7.     Console.WriteLine(nums[i] + "\t");  
  8. }  
  9.     Console.ReadKey();  

结果为:


若想降序排序,当然可以,只需要加一行代码就可以实现,代码如下:

[html]  view plain  copy
 print ?
  1. Array.Reverse(nums);//方法,反转  

这行代码的作用就是反转输出结果,是不是So easy呢。但是,这些在程序的内部是怎样实现的呢?虽然说它只是一种方法,并不需要我们知道具体的操作,但总有一些强迫症的人,不知道结果心里不爽,若正在读这篇博客的你和我一样好奇是怎样实现的就继续往下看吧。

【正文】

这种方法具体是这样实现的?

咳咳……


我也不知道,那就百度吧。好心的网友解释是这样的:Arrays.sort()方法根据传出参数的长度的大小来判断用哪种排序方法,如果数组的长度小于7用冒泡排序,如果数组长度大于7,将数组分为两部分,前半部分和后半部分分别进行冒泡排序,最后再执行一次总的排序。

也就是说Arrays.sort()方法就是相当于给我们写好的一个冒泡排序(长度小于7位),就像小杨老师解释的,大部分的方法差不多都是这样。比如说该吃饭了,自己做饭需要买菜、洗菜、切菜、炒菜,一切都完成后才能顺利的吃到饭,但是若不想做饭该怎么办呢?有什么方法呢?点外卖,手机一点,想吃什么直接就给送过来了,这就是一种方法,一种别人做好的,你直接就可以拿过来用的方法。

在看其他同学博客的过程中意外发现了Array.Sort()的一个严重bug,若我代码如下的时候运行的结果是这样的:

[csharp]  view plain  copy
 print ?
  1. int[] nums = new int[] {2,6,21,652,65,6,1,12 };  
  2. Array.Sort(nums);  


得到的结果为:1,12,2,21,6,65,652

可以看到并没有完全按照升序排列,这是为什么呢?因为Array.Sory()方法的排序默认按照ASCII字符码进行排序,数字式按照他们的字符串形式排序的。

这就是Array.Sort()方法的排序原理,虽然很简单,但是有了以上例子我觉得Array.Sort()方法在一定情况下并不适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值