Algorithm 如何插入到半排序列表中?
我有一个大的半排序字符串列表,只按第一个字符排序。每个字符串都有一个ID。前x个条目以字母A开头,然后是以字母B开头的条目,依此类推。并非所有的字母都必须表示。 我所说的半排序是指存在例外(排序错误的条目)。无法以正确的方式对条目进行排序。已经存在的条目必须保留其ID 我制作了以下示例,仅包括起始字母A和B。以C、Z和S开头的条目输入错误 例如:Algorithm 如何插入到半排序列表中?,algorithm,sorting,pseudocode,Algorithm,Sorting,Pseudocode,我有一个大的半排序字符串列表,只按第一个字符排序。每个字符串都有一个ID。前x个条目以字母A开头,然后是以字母B开头的条目,依此类推。并非所有的字母都必须表示。 我所说的半排序是指存在例外(排序错误的条目)。无法以正确的方式对条目进行排序。已经存在的条目必须保留其ID 我制作了以下示例,仅包括起始字母A和B。以C、Z和S开头的条目输入错误 例如: | ID | NAME | |------|------| | 6000 | AXXX | | 6001 | AXZS | | 6003 | AA
| ID | NAME |
|------|------|
| 6000 | AXXX |
| 6001 | AXZS |
| 6003 | AAFD |
| 6004 | CSDF |
| 6005 | ZSSF |
| 6006 | ASDF |
| 6007 | BXAS |
| 6010 | BZDS |
| 6011 | SHZF |
| 6012 | BHZT |
我想在列表中添加条目。如果可能,名称以字母A开头的条目应与以字母A开头的其他条目分组插入,或者在末尾插入其他条目
在上述示例中,名称以字母a开头的条目应插入ID 6002。
名称以字母B开头的条目应添加ID 6008
我不知道如何解决这个问题。我的第一个想法是首先从最低ID开始遍历现有列表,并保存关于字母组的信息比如:
字母:A StartID:6000 EndID:6006 IsFull:False
字母:B StartID:6007 EndID:6012 IsFull:False
然后在插入时,使用上述信息确定新条目的可能ID。插入新条目后,必须更新此信息
然而,我不知道如何才能真正做到这一点。我所需要的只是一些可能的解决方案的伪代码,这样我就可以编写自己的代码。您可能需要一些步骤
- 找到插入组的位置(如果前几个是
,B
,在Z
之前),该怎么办A
- 查找组的最后一个成员(如果存在),否则查找上一个组的最后一个成员(例如,在插入
时)F
- 确定左索引中最后一个组成员之后和下一个组的第一个成员之前是否有空间
- 如果存在要插入的位置,请插入该值,否则
- 找到最后一个位置
- 附加值
-
你必须跟踪并考虑几个位置,一些结构会帮助你使用这个。
- 如果您在左栏中按顺序运行了
、A
、B
、Z
,则带Z的块是否构成一个组?C座是不是放错地方了?否则,无论第一个新成员在哪里,您的价值观都应该增长C
- 需要考虑多个字符(大概是代码> ABAA < /代码>后面的代码> AABB < /代码>)
- 找到插入组的位置(如果前几个是
,B
,在Z
之前),该怎么办A
- 查找组的最后一个成员(如果存在),否则查找上一个组的最后一个成员(例如,在插入
时)F
- 确定左索引中最后一个组成员之后和下一个组的第一个成员之前是否有空间
- 如果存在要插入的位置,请插入该值,否则
- 找到最后一个位置
- 附加值
- 如果您在左栏中按顺序运行了
、A
、B
、Z
,则带Z的块是否构成一个组?C座是不是放错地方了?否则,无论第一个新成员在哪里,您的价值观都应该增长C
- 需要考虑多个字符(大概是代码> ABAA < /代码>后面的代码> AABB < /代码>)
- 您可能需要一些步骤
-
你必须跟踪并考虑几个位置,一些结构会帮助你使用这个。