今天講排序
。
先講C#已經實現好的,可以直接使用的排序方式。畢竟我們的目標並不是學習怎么給數字排序不是。
然后我們再以興趣班的打開方式來看看手動寫排序是怎樣的體驗。
今天的問題是:任意輸入三個整數,然后按從小到大的順序輸出。
C#排序方法get√
我們現在不知道C#有哪些排序的方法,我們應該用什么關鍵詞去查?無外乎,“C# 排序”、“.net 排序”。
搜索“C# 排序”,結果如下:
我們得到了一些新的關鍵詞“Sort”、“SortList”、“排序比較”,而“實現”、“算法”這種關鍵詞,應該被過濾掉。同時,我們可以參考右邊的“相關搜索”(或者谷歌搜索中的自動填充功能),在搜索結果不盡如人意的時候,通過多次、准確定位關鍵詞,得到我們想要的答案。
接下來,我們將搜索詞條改為“C# 排序比較”,可以看到,基本上就是我們想要的內容了。
而我們也看到了另一個關鍵詞“List”,我們可以大膽猜測,有很多、很多種存儲一組數據的方法(SortList、List),也有很多種排序的方法。
剩下的問題,就是看博客,學習、理解、使用。感興趣的同學可以自己動手做一些大數據量、不同數據的實驗,來測試不同用法的功能。
不要盲目的相信博客寫的內容,初學的時候沒有辨識的能力的話,可以多看幾篇同類型的文章,多動手去實驗,去確認。
博客畢竟不比讀書,書尚且可能有疏誤,更不用說博客了。
所以有官方資料的時候,以官方資料優先。有些問題可能閱讀書籍,結合博客效果更佳。
我在這里就簡單寫一個排序的功能,貼到示例代碼里面。
排序算法
排序問題是計算機的一個常見問題,直接搜索“排序算法”,就可以得到很多種算法。大學學習C語言也要教,其中比較常見的有冒泡排序、選擇排序、二分插入排序、快速排序等等,不同的方法又有不同的應用場景和時間復雜度。
個人認為,在不研究算法,不考試的情況下,深入理解排序算法的意義不大。重點應該放在時間復雜度
這個概念的理解,以及學習如何把這些算法通過代碼實現上。
時間復雜度
,還有它的小伙伴空間復雜度
在衡量程序的性能上很有意義。搜索“時間復雜度”、“空間復雜度”、“時間復雜度 空間復雜度”,進行學習。
簡單理解,時間復雜度是指執行算法所需要的計算工作量;而空間復雜度是指執行這個算法所需要的內存空間,over。
延展
今天的問題,依然可以像累計求和的問題一樣擴展出下面的功能:
1.從三個數字排序變成任意n個數字排序;
2.從整數排序變成小數排序;
3.提供排序方式的選擇,“從小到大”還是“從大到小”;
4.用控制台太麻煩了,很丑,提供一個UI界面是不是更好;
(1)如果使用UI,多個數字怎樣輸入、怎樣交互會比較合理
(2)怎樣去驗證輸入的內容,確保一定是數字
(3)如果用戶輸入出錯,應該怎么提示
(4)怎樣輸出結果
.........
可以看到,要完成功能是很簡單的,要使程序變得美觀、交互友好、邏輯正確並且健壯,卻不是一件容易的事情。
后面講到桌面程序的時候,我們可以拿這個例子來寫寫。