Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Algorithm 如何插入到半排序列表中?_Algorithm_Sorting_Pseudocode - Fatal编程技术网

Algorithm 如何插入到半排序列表中?

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。前x个条目以字母A开头,然后是以字母B开头的条目,依此类推。并非所有的字母都必须表示。 我所说的半排序是指存在例外(排序错误的条目)。无法以正确的方式对条目进行排序。已经存在的条目必须保留其ID

我制作了以下示例,仅包括起始字母A和B。以C、Z和S开头的条目输入错误

例如:

| 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
    C
    ,则带Z的块是否构成一个组?C座是不是放错地方了?否则,无论第一个新成员在哪里,您的价值观都应该增长
  • 需要考虑多个字符(大概是代码> ABAA < /代码>后面的代码> AABB < /代码>)

    • 您可能需要一些步骤

      • 找到插入组的位置(如果前几个是
        B
        Z
        ,在
        A
        之前),该怎么办
      • 查找组的最后一个成员(如果存在),否则查找上一个组的最后一个成员(例如,在插入
        F
        时)
      • 确定左索引中最后一个组成员之后和下一个组的第一个成员之前是否有空间
      • 如果存在要插入的位置,请插入该值,否则
        • 找到最后一个位置
        • 附加值
      一些考虑

        你必须跟踪并考虑几个位置,一些结构会帮助你使用这个。
      • 如果您在左栏中按顺序运行了
        A
        B
        Z
        C
        ,则带Z的块是否构成一个组?C座是不是放错地方了?否则,无论第一个新成员在哪里,您的价值观都应该增长
      • 需要考虑多个字符(大概是代码> ABAA < /代码>后面的代码> AABB < /代码>)

      您似乎甚至没有尝试编写自己的伪代码。我尝试过,但不幸失败。基本上,我对如何处理错误排序的条目一无所知。这其中的“错误排序”部分真的把事情搞砸了。除了迭代整个列表以查找第一个或最后一个匹配项外,我想不出找到插入点的方法。您似乎甚至没有尝试编写自己的伪代码。我尝试过,但不幸失败。基本上,我对如何处理错误排序的条目一无所知。这其中的“错误排序”部分真的把事情搞砸了。除了迭代整个列表以查找第一个或最后一个匹配项之外,我想不出找到插入点的方法。