今天讲排序
。
先讲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)怎样输出结果
.........
可以看到,要完成功能是很简单的,要使程序变得美观、交互友好、逻辑正确并且健壮,却不是一件容易的事情。
后面讲到桌面程序的时候,我们可以拿这个例子来写写。