java / .net世界中的人们拥有提供排序列表方法的框架。
在CS中,我们都可能已经通过了Bubble / Insertion / Merge / Shell排序算法。 这些天你会写下这些吗?
有了框架,您是否编写了用于排序的代码?
您是否认为让人们在面试中编写代码进行排序是否有意义? (除了实习生/初级开发人员要求)
答案 0 :(得分:7)
我今天写了两段代码来排序数据
list.Sort();
enumerable.OrderBy(x => x); // Occasionally a different lambda is used
答案 1 :(得分:6)
我为开发人员工具公司工作,因此我有时需要编写新的RTL类型和例程。排序是开发人员需要的,所以我有时需要编写它。
不要忘记,所有的库代码都没有从某个山区传下来:某个地方的开发人员不得不写它。
答案 2 :(得分:3)
我没有编写排序算法,但我已经在.Net中实现了IComparer的几个类,这在前几次很有意思。
在大多数情况下,我不会编写用于排序的代码。应该理解为什么像.Net这样的框架经常使用像Quick sort这样的特定排序策略。
我可以看到给出或给出一个排序问题,其中一些工作是实现IComparer并理解排序类的不同方法。向某人展示冒泡排序并且问:“为什么你不想在大多数应用程序中这样做?”
这是一件相当容易的事情。答案 3 :(得分:3)
我可以100%肯定地说,自离开大学以来,我没有写过“传统”排序程序之一。很高兴知道它背后的理论,但是将它们应用到通过其他方法无法实现的现实世界的情况并不经常发生(至少根据我的经验......)。
答案 4 :(得分:2)
仅限雇主的面试/测试=)
答案 5 :(得分:2)
当我必须使用自定义键比较对多GB文件进行排序时,我写了一个合并排序。我喜欢合并排序 - 它很容易理解,稳定,并且具有最差的O(n log n)性能。
我一直在寻找借口尝试radix sort。它不像大多数排序算法那样通用,因此不会有任何提供它的库,但在适当的情况下它应该是一个很好的加速。
答案 6 :(得分:1)
就个人而言,我一段时间没有必要编写自己的排序代码。
就面试问题而言,它会淘汰那些在CS课程中没有注意的人。
您可以通过询问如何构建Comparable(Capital C)对象或类似的东西来测试API知识。
答案 7 :(得分:1)
我看待它的方式,就像许多其他知识领域一样,编程也有一个理论和实践的方法。
“理论程序设计”领域为我们提供了快速排序,Radix排序,Djikstra算法以及许多其他对计算技术进步绝对必要的东西。
“实用编程”领域涉及这样一个事实,即“理论编程”中创建的解决方案应该以一种更容易的方式易于被所有人访问,因此理论思想可以获得许多创造性的用途。这给了我们像Python这样的高级语言,几乎允许任何语言为最基本的操作实现打包方法,比如排序或搜索具有足够好的性能以适合几乎所有人。
一个人离不开其他人...... 我们大多数人不需要硬编码排序算法并不意味着没有人应该这样做。
答案 8 :(得分:1)
我很乐意写一种各种各样的东西。 我有一个文本列表..最常见的十个必须根据它们被选中的频率显示出来。所有其他条目必须根据alpha排序显示。
这并不难,但我确实必须写一个支持它。
我还必须对那些元素不容易用开箱即用的代码进行排序的对象进行排序。
同样适用于搜索..我必须走一个文件并搜索静态大小的记录。当我找到一条记录时,我不得不移回一条记录,因为我在它之前插入。 在大多数情况下,它非常简单,我在二进制搜索中粘贴。需要进行一些更改以支持访问方法,因为我没有使用内存中的实际数组。啊c& @p ..我可以像流一样对待它..现在我想要回去看看......
答案 9 :(得分:0)
男人,如果有人在接受采访时问我最好的排序算法是什么,并且当我说'timsort'时我没有立即理解,我会认真地重新考虑我是否想在那里工作。
Timsort
这描述了一个自适应的,稳定的, 自然的合并,谦虚地称之为 timsort(嘿,我赚了它)。它 对许多人有超自然的表现 各种部分有序的数组 (需要少于1g(N!)的比较, 和N-1一样少,但速度快 Python之前的高度调整 随机阵列上的样本混合。
简而言之,主要例程 在阵列上行进一次,离开 对,交替识别 下一次运行,然后合并到 以前的运行“聪明地”。 其他一切都是复杂的 速度,以及一些来之不易的措施 记忆效率。
http://svn.python.org/projects/python/trunk/Objects/listsort.txt Is timsort general-purpose or Python-specific?
答案 10 :(得分:0)
我没有真正实现排序,除了编码练习和观察语言的有趣功能(比如你如何在Python中用一行快速排序)。
我认为在面试中提问是一个有效的问题,因为它反映了开发人员是否考虑过这类事情......我觉得知道list.sort()在调用它时做了什么很重要。这只是我理论的一部分,你应该了解作为程序员的一切背后的基础知识。
答案 11 :(得分:0)
我从不写任何有图书馆例程的东西。几十年来我没有编码。我也不会。有了quicksort和timsort直接可用,没有理由写一个类别。
我注意到SQL会为我排序。
我写的很多东西,其中只有其中一种。
我从不编写自己的I / O驱动程序。 (虽然我过去。)
我从不编写自己的图形库。 (是的,我在80年代曾经这样做过一次)
我从不编写自己的文件系统。 (避免这种情况。)
答案 12 :(得分:0)
绝对没有理由再编码。我认为,了解您所使用的内容的效率非常重要,这样您就可以选择最适合您所分类数据的内容。
答案 13 :(得分:0)
是。有时候,当你的列表预计最多只有几十条记录时,挖出Shell排序会打败内置排序例程。