使用数组对来合并有序列表的制作方法_3

文档序号:9510123阅读:来源:国知局
的数组的开头处(在排序阶段在第一排序阶段后的情况下)建立输出光标(动作303)。例如,在图4A中,输出光标421位于空第二数组402的开头处。
[0121]方法300然后涉及以下动作:通过按顺序将值分配给下一中间排序列表中的元素来生成下一中间合并有序列表(动作310)。因此,动作310的内容可以对下一中间有序列表中的每一元素执行。这将通过参考参照图4A到4E的特定示例来展示。
[0122]将第一输入光标指向的元素的值与第二输入光标指向的元素处的值进行比较(判定框311)。例如,在图4A中,将第一输入光标411指向的整数5与第二输入光标412指向的整数2进行比较。
[0123]如果第一输入光标指向的元素处的值相对于第二输入光标指向的元素处的值满足排序优先级(判定框311中的“是”),则用第一输入光标指向的值来填充下一中间合并有序列表中的相应元素(动作321)。然后确定在第一有序列表(在这是第一排序阶段的情况下)或者先前中间合并有序列表(在这是后续排序阶段的情况下)中是否还有元素(判定框322)。该判定无需通过判定框322的每一迭代来明确作出。例如,如果动作310尚未被执行达至少等于或小于任一输入有序列表的最小长度的次数,则无需执行校验。然而,即使该校验未被明确执行,该校验通过参考已经执行动作310的次数仍然等于或小于该最小次数而仍然是隐式的。如果不再有任何元素(判定框322中的“否”),则将相对有序列表中的从第二输入光标开始的其余值填充为下一中间合并有序列表的最后值(动作312),并且该排序阶段结束(动作304)。如果还有元素(判定框322中的“是”),则将第一输入光标移至第一有序列表(在这是第一排序阶段的情况下)或下一中间合并有序列表(在这是后续排序阶段的情况下)中的下一相邻元素(动作323)。此外,将输出光标定位在第一有序列表(在这是第一排序阶段的情况下)或者先前中间合并有序列表(在这是后续排序阶段的情况下)中的下一元素处(也是动作323)。
[0124]如果第一输入光标指向的元素处的值相对于第二输入光标指向的元素处的值不满足排序优先级(判定框311中的“否”),则用第二输入光标指向的值来填充下一中间合并有序列表中的相应元素(动作331)。然后确定下一输入有序列表中是否还留有元素(判定框332)。如果为否,则将相对有序列表中的从第一输入光标开始的其余值填充为下一中间合并有序列表的最后值(动作312),并且该排序阶段结束(动作304)。如果还有元素(判定框332中的“是”),则将第二输入光标移至下一有序列表中的下一相邻元素(动作333)。此外,将输出光标定位在下一中间合并有序列表中的下一元素(也是动作333)。
[0125]例如,在图4A中,输入光标411指向的整数5不等于或小于输入光标412指向的整数2(判定框311中的“否”)。因此,用输入光标412指向的值2来填充下一中间合并有序列表的相应元素(即,输出光标421指向的元素)(动作331)。第二有序列表中还有元素(判定框332中的“是”),并由此第二输入光标412和输出光标421两者都前进(动作333)。所得排序状态400B在图4B中示出。
[0126]在图4B中,输入光标411指向的整数5不等于或小于输入光标412指向的整数4 (判定框311中的“否”)。因此,用输入光标412指向的值4来填充输出光标421处的相应元素(动作331)。第二有序列表中还有元素(判定框332中的“是”),并由此第二输入光标412和输出光标421两者都前进(动作333)。所得排序状态400C在图4C中示出。
[0127]在图4C中,输入光标411指向的整数5等于或小于输入光标412指向的整数7 (判定框311中的“是”)。因此,用输入光标411指向的值5来填充输出光标421处的相应元素(动作321)。第一有序列表中还有元素(判定框322中的“是”),并由此第一输入光标411和输出光标421两者都前进(动作333)。所得排序状态400D在图4D中示出。
[0128]在图4D中,输入光标411指向的整数8不等于或小于输入光标412指向的整数7 (判定框311中的“否”)。因此,用输入光标412指向的值7来填充输出光标421处的相应元素(动作331)。第二有序列表中不再有元素(判定框332中的“否”)。因此,将来自第一输入有序列表的最后整数值8填充到下一中间合并有序列表的最后值(动作312),由此完成第一排序阶段(动作314)。所得排序状态400E在图4E中示出。输入光标和输出光标的位置未在图4E中示出,因为它们已经完成其用于该第一排序阶段的功能。在只存在两个输入有序列表的情况下该方法将在此结束。尽管第一输入有序列表B和第二输入有序列表C仍被包括在第一数组401中,但它们将不影响后续排序操作,因为这些有序列表将在后续排序阶段期间被简单地重写。因此,处理无需被浪费在从第一数组401中删除第一输入有序列表B和第二输入有序列表C。
[0129]第二排序阶段然后可以继续再次将特定示例与图3进行比较。同样,建立第一输入光标(动作301)。由于这是后续排序阶段,因此第一输入光标被建立在从先前排序阶段产生的先前中间合并有序列表的第一元素处。例如,图5A示出了第一排序阶段开始时的排序状态500A,其中存在位于第一中间合并有序列表的第一元素处的第一输入光标511.
[0130]在尚未被处理的第一数组中的下一有序列表中的第一元素处建立第二输入光标(动作302)。在第二阶段的情况下,这将会是连续有序列表中的第三输入有序列表。在其中序列包括有序列表B、C和A(以该次序连续放置)的图5A的情况下,光标512被定位在输入有序列表A的第一元素处。
[0131]在与包含先前中间合并有序列表的数组相对的数组的开头处(在该排序阶段在第一排序阶段后)建立输出光标(动作303)。例如,在图5A中,由于第一中间合并有序列表处于第二数组402中,因此输出光标521被放置在第一数组401的开头处。
[0132]方法300然后涉及以下动作:通过按顺序将值分配给下一中间排序列表中的元素来生成下一中间合并有序列表(动作310)。因此,动作310的内容可以对下一(S卩,第二)中间有序列表中的每一元素执行。这将通过参考参照图5A到5J的特定示例来展示。
[0133]将第一输入光标指向的元素的值与第二输入光标指向的元素处的值进行比较(判定框311)。例如,在图5A中,输入光标511指向的整数2不等于或小于输入光标512指向的整数1(判定框311中的“否”)。因此,用输入光标512指向的值1来填充第二中间合并有序列表的相应元素(即,输出光标521指向的元素)(动作331)。第三有序列表中还有元素(判定框332中的“是”),并由此第二输入光标512和输出光标521两者都前进(动作333)。所得排序状态500B在图5B中示出。
[0134]在图5B中,输入光标511指向的整数2等于或小于输入光标512指向的整数2 (判定框311中的“是”)。因此,用输入光标511指向的值2来填充输出光标521处的相应元素(动作321)。第一中间合并有序列表中还有元素(判定框322中的“是”),并由此第一输入光标511和输出光标521两者都前进(动作323)。所得排序状态500C在图5C中示出。
[0135]在图5C中,输入光标511指向的整数4不等于或小于输入光标512指向的整数
2(判定框311中的“否”)。因此,用输入光标512指向的值2来填充输出光标521处的相应元素(动作331)。第三有序列表中还有元素(判定框332中的“是”),并由此第二输入光标512和输出光标521两者都前进(动作333)。所得排序状态500D在图?中示出。
[0136]在图?中,输入光标511指向的整数4不等于或小于输入光标512指向的整数
3(判定框311中的“否”)。因此,用输入光标512指向的值3来填充输出光标521处的相应元素(动作331)。第三有序列表中还有元素(判定框332中的“是”),并由此第二输入光标512和输出光标521两者都前进(动作333)。所得排序状态500E在图5E中示出。
[0137]在图5E中,输入光标511指向的整数4等于或小于输入光标512指向的整数4 (判定框311中的“是”)。因此,用输入光标511指向的值4来填充输出光标521处的相应元素(动作321)。第一中间合并有序列表中还有元素(判定框322中的“是”),并由此第一输入光标511和输出光标521两者都前进(动作323)。所得排序状态500F在图5F中示出。
[0138]在图5F中,输入光标511指向的整数5不等于或小于输入光标512指向的整数4(判定框311中的“否”)。因此,用输入光标512指向的值4来填充输出光标521处的相应元素(动作331)。第三有序列表中还有元素(判定框332中的“是”),并由此第二输入光标512和输出光标521两者都前进(动作333)。所得排序状态500G在图5G中示出。
[0139]在图5G中,输入光标511指向的整数5等于或小于输入光标512指向的整数9 (判定框311中的“是”)。因此,用输入光标511指向的值5来填充输出光标521处的相应元素(动作321)。第一中间合并有序列表中还有元素(判定框322中的“是”),并由此第一输入光标511和输出光标521两者都前进(动作323)。所得排序状态500H在图5H中示出。
[0140]在图5H中,输入光标511指向的整数7等于或小于输入光标512指向的整数9 (判定框311中的“是”)。因此,用输入光标511指向的值7来填充输出光标521处的相应元素(动作321)。第一中间合并有序列表中还有元素(判定框322中的“是”),并由此第一输入光标511和输出光标521两者都前进(动作323)。所得排序状态5001在图51中示出。
[0141]在图51中,输入光标511指向的整数8等于或小于输入光标512指向的整数9(判定框311中的“是”)。因此,用输入光标511指向的值8来填充输出光标521处的相应元素(动作321)。第一中间合并有序列表中不再有元素(判定框322中的“否”)。因此,将来自第三输入有序列表的最后整数值9填充到第二中间合并有序列表的最后值(动作312),由此完成第二排序阶段(动作314)。所得排序状态500J在图5J中示出,且第二中间合并有序列表(并且在只有三个输入有序列表的情况下是最终合并列表)被包括在第一数组内。输入光标和输出光标的位置未在图5J中示出,因为它们已经完成其用于该排序阶段的功能。尽管第一中间合并有序列表仍被包括在第二数组402中,但这些值将不影响后续排序操作(如果由于第四或更多输入有序列表而存在后续排序操作),因为它们将在后续排序阶段期间被简单地重写。因此,处理不会浪费在从第二数组402中删除第一中间合并有序列表。
[0142]如果存在更多输入有序列表,则方法300可以对更多有序列表重复。每个输入有序列表导致一附加排序阶段。例如,在存在3个输入有序列表的情况下,存在两个排序阶段和一个中间合并有序列表,以及一个最终合并有序列表。更一般而言,如果存在N个输入有序列表(其中N是大于一的整数),则将存在N-1个排序阶段以及N-2个中间合并有序列表。中间合并有序列表的位置随排序阶段在数组之间来回跳转。
[0143]因此,已经描述了现有技术优先级队列方法和使用两对数组的方法(之后称为“数组对方法”)。从描述这两种方法所需的空间长度将显而易见,存在与数组对方法相关联的更具描述性和直观性的复杂性。
[0144]这可能导致总结出数组对方法比优先级队列方法要低效得多。虽然这对于心算可以如此,但在使用现代处理器来实现时并非如此。例如,与数
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1