1. 程式人生 > >[C#]Array.Sort()排序的原理

[C#]Array.Sort()排序的原理

【前言】

C#視訊的看到氣泡排序以後,小楊老師講了一個更簡單的排序方法,這個方法就是Array.Sort()函式,利用這個函式可直接對陣列中的數字進行排序,比氣泡排序簡單得多了,僅僅只需要一行程式碼,下面是程式碼和執行結果。

            int[] nums = new int[] { 2, 652, 32, 1, 6, 65 };
            Array.Sort(nums);
            //Array.Reverse(nums);//方法,反轉
          
            for (int i = 0; i < nums.Length; i++)
            {
                Console.WriteLine(nums[i] + "\t");
            }
                Console.ReadKey();

結果為:


若想降序排序,當然可以,只需要加一行程式碼就可以實現,程式碼如下:

            Array.Reverse(nums);//方法,反轉

這行程式碼的作用就是反轉輸出結果,是不是So easy呢。但是,這些在程式的內部是怎樣實現的呢?雖然說它只是一種方法,並不需要我們知道具體的操作,但總有一些強迫症的人,不知道結果心裡不爽,若正在讀這篇部落格的你和我一樣好奇是怎樣實現的就繼續往下看吧。

【正文】

這種方法具體是這樣實現的?

咳咳……

我也不知道,那就百度吧。好心的網友解釋是這樣的:Arrays.sort()方法根據傳出引數的長度的大小來判斷用哪種排序方法,如果陣列的長度小於7用

氣泡排序,如果陣列長度大於7,將陣列分為兩部分,前半部分和後半部分分別進行氣泡排序,最後再執行一次總的排序。

也就是說Arrays.sort()方法就是相當於給我們寫好的一個氣泡排序(長度小於7位),就像小楊老師解釋的,大部分的方法差不多都是這樣。比如說該吃飯了,自己做飯需要買菜、洗菜、切菜、炒菜,一切都完成後才能順利的吃到飯,但是若不想做飯該怎麼辦呢?有什麼方法呢?點外賣,手機一點,想吃什麼直接就給送過來了,這就是一種方法,一種別人做好的,你直接就可以拿過來用的方法。

在看其他同學部落格的過程中意外發現了Array.Sort()的一個嚴重bug,若我程式碼如下的時候執行的結果是這樣的:

            int[] nums = new int[] {2,6,21,652,65,6,1,12 };
            Array.Sort(nums);

得到的結果為:1,12,2,21,6,65,652

可以看到並沒有完全按照升序排列,這是為什麼呢?因為Array.Sory()方法的排序預設按照ASCII字元碼進行排序,數字式按照他們的字串形式排序的。

這就是Array.Sort()方法的排序原理,雖然很簡單,但是有了以上例子我覺得Array.Sort()方法在一定情況下並不適用。