Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 一种语言如何*知道*列表何时排序?_List_Sorting - Fatal编程技术网

List 一种语言如何*知道*列表何时排序?

List 一种语言如何*知道*列表何时排序?,list,sorting,List,Sorting,如果这个问题很愚蠢,请原谅,但我突然想到,我不知道一种语言是如何知道列表是否排序的 假设我有一张清单: ["Apple","Apricot","Blueberry","Cardamom","Cumin"] 我想插入“肉桂”。 我使用的语言不知道列表是否已排序;这只是一张单子。而且它没有像我们一样的“宽屏幕”视野,所以它不知道a组块从哪里结束,C组块从列表之外开始。因此,它将遍历并比较每个数组字符串的第一个字母与插入字符串的第一个字母。如果插入字符更大,它将移动到下一个字符串。如果字符匹配,则移

如果这个问题很愚蠢,请原谅,但我突然想到,我不知道一种语言是如何知道列表是否排序的

假设我有一张清单:

["Apple","Apricot","Blueberry","Cardamom","Cumin"]
我想插入
“肉桂”
。 我使用的语言不知道列表是否已排序;这只是一张单子。而且它没有像我们一样的“宽屏幕”视野,所以它不知道a组块从哪里结束,C组块从列表之外开始。因此,它将遍历并比较每个数组字符串的第一个字母与插入字符串的第一个字母。如果插入字符更大,它将移动到下一个字符串。如果字符匹配,则移动到下一个字母。如果它移动到下一个字符串,并且数组的字符大于insert的字符,那么该字符将插入其中

我的问题是,一种语言能知道列表什么时候被排序吗? 如果对未排序列表和已排序列表进行梳理的过程是相同的,并且列表仍然是迭代的,那么排序如何节省时间

编辑: 我理解“排序允许依赖排序的算法工作”;我很抱歉没有说清楚。我想我是在问,在计算机语言内部,排序是否有其内在的意义,或者说这是人们建立在它之上的一种策略。我想是后者,你们已经证实了。一种语言不知道它是否在排序,但我们能识别性能的差异

一种语言能知道列表什么时候被排序吗

你是说语言翻译吗?当然,它可以检查列表是否已排序,只需检查每个元素是否比前一个元素“大”。我怀疑口译员会这样做;他们为什么要关心列表是否已排序

通常,如果您想在列表中插入“Cinammon”,您需要指定插入位置,或者只在末尾追加它。列表是否预先排序对口译员来说并不重要。列表的使用方式决定了已排序的列表是否保持排序,以及是否需要先排序。(例如,如果您试图使用二进制搜索在列表中查找某个内容,则必须对列表进行排序。但您必须对此进行安排)

听我说的语言

(哪个是?)

。。。不知道列表已排序;这只是一张单子。而且它没有像我们一样的“宽屏幕”视野,所以它不知道a组块从哪里结束,C组块从列表之外开始。因此,它将遍历并比较每个数组字符串的第一个字母与插入字符串的第一个字母。如果插入字符更大,它将移动到下一个字符串。如果字符匹配,则移动到下一个字母。如果它移动到下一个字符串,并且数组的字符大于insert的字符,那么该字符将插入其中

我想,你的意思是,它寻找第一个比插入的元素“大”的元素,然后在它前面插入新元素。这意味着,如果列表已经排序,它将维护列表的“排序”属性。对于未排序的列表来说,这是非常低效的。此外,如果确实发生了这种情况,那么您描述的用于查找插入点的技术(线性搜索)将是低效的。我怀疑您对列表/语言语义的理解是不正确的


如果你用一种特定的语言给出一个具体的例子,那会有很大帮助。

语言不知道这些事情

有些编程语言附带一个包含数据结构的标准库,如果没有,通常可以链接到包含数据结构的库

其中一些数据结构可能是维护顺序的集合类型

因此,如果您有一个表示有序集合类型的数据结构,那么无论何时添加或删除项,都是该数据结构维护集合的顺序

如果您使用的是最基本的集合类型,即数组,那么无论是语言、运行时还是数据结构本身(数组),都丝毫不关心您在何时插入项

这是钥匙。该语言不/不能/不应该知道您的数据结构是已排序的还是未排序的。事实上,它甚至不关心它到底是什么样的数据结构

现在考虑一下:插入或删除到底意味着什么?插入新项目或删除现有项目需要采取哪些确切步骤。事实证明,这些操作的确切含义取决于您使用的数据结构。数组插入新元素的方式与链表非常不同

因此,这些操作必须在应用这些操作的数据结构的上下文中定义,这是理所当然的。该语言通常不提供任何关键字来处理这些数据结构。相反,附带的库提供了这些结构的内置实现,其中包含执行这些操作的方法

现在回到原来的问题:语言如何“知道”列表是否已排序?为什么处理已排序的列表更有效?答案是,正如我上面所说的,语言不知道也不应该知道列表的内部内容。您正在使用的列表结构的实现知道它是否已排序,以及如何以有序的方式插入新节点。例如,某个数据结构可以使用索引(很像书的索引)来定位以某个字母开头的单词的位置,从而减少未排序的列表遍历整个列表所需的时间,一次遍历一个元素


希望这能让它更清楚一点。

列表默认情况下不知道。这取决于实现,可能有一个标志或其他东西。如果你的问题是“列表如何知道?”