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()方法在一定情況下並不適用。

發佈了61 篇原創文章 · 獲贊 33 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章