Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 从2个数组中创建一个已排序的数组_Algorithm_Data Structures - Fatal编程技术网

Algorithm 从2个数组中创建一个已排序的数组

Algorithm 从2个数组中创建一个已排序的数组,algorithm,data-structures,Algorithm,Data Structures,有2个数组用于ex。 A=[20,4,21,6,3] B=[748,32,48,92,23……] 假设B非常大,可以容纳数组A的所有元素 查找数组B的排序方式(也包含数组A的所有元素) 以最有效的方式设计算法。闻起来像家庭作业。基本上,从末尾开始写入数组B,在A和B中记录您正在阅读的位置。闻起来像是家庭作业。基本上,从末尾开始写入数组B,跟踪A和B中的读取位置。只要尝试一下: 将数组A合并到B中 使用快速排序算法 试一试: 将数组A合并到B中 使用快速排序算法 这听起来像是合并排序算法。你会发现

有2个数组用于ex。 A=[20,4,21,6,3] B=[748,32,48,92,23……]

假设B非常大,可以容纳数组A的所有元素

查找数组B的排序方式(也包含数组A的所有元素)


以最有效的方式设计算法。

闻起来像家庭作业。基本上,从末尾开始写入数组B,在A和B中记录您正在阅读的位置。

闻起来像是家庭作业。基本上,从末尾开始写入数组B,跟踪A和B中的读取位置。

只要尝试一下:

  • 将数组A合并到B中

  • 使用快速排序算法

  • 试一试:

  • 将数组A合并到B中

  • 使用快速排序算法


  • 这听起来像是合并排序算法。你会发现大量的例子。然后可以修改以适应。

    这听起来像是合并排序算法。你会发现大量的例子。然后可以修改以适应

  • 在将元素从A添加到B之前,请检查是否超过了数组的大小,如果没有将A合并到B中

  • 然后快速排序

  • 但如果您只想将两个数组合并到一个新数组中,其中新数组的长度等于这两个数组的合并长度。这是一个跳跃式的开始,如果你能从这里开始,试试看

    public double[] combineArrays(double[] first, double[] second) {
    
        int totalLenth = first.length + second.length;
        double[] newDoubles = new double[totalLenth];
        for (int i = 0; i < first.length; i++) {
            newDoubles[i] = first[i];
        }
    
        for (int j = first.length; j < newDoubles.length; j++) {
            newDoubles[j] = second[j - first.length];
        }
        return newDoubles;
    }
    
    public double[]combineArrays(双[]第一,双[]第二){
    int totalenth=first.length+second.length;
    double[]newDoubles=新的double[totalenth];
    for(int i=0;i
    希望这有帮助,祝你好运

  • 在将元素从A添加到B之前,请检查是否超过了数组的大小,如果没有将A合并到B中

  • 然后快速排序

  • 但如果您只想将两个数组合并到一个新数组中,其中新数组的长度等于这两个数组的合并长度。这是一个跳跃式的开始,如果你能从这里开始,试试看

    public double[] combineArrays(double[] first, double[] second) {
    
        int totalLenth = first.length + second.length;
        double[] newDoubles = new double[totalLenth];
        for (int i = 0; i < first.length; i++) {
            newDoubles[i] = first[i];
        }
    
        for (int j = first.length; j < newDoubles.length; j++) {
            newDoubles[j] = second[j - first.length];
        }
        return newDoubles;
    }
    
    public double[]combineArrays(双[]第一,双[]第二){
    int totalenth=first.length+second.length;
    double[]newDoubles=新的double[totalenth];
    for(int i=0;i

    希望这能有所帮助,祝你好运。

    鉴于你的数组是整数数组,你可以用它在线性时间内排序
    B
    O(n)
    。Wikipedia有一个很好的编写和python代码示例


    基数排序与元素数成线性关系。虽然它也依赖于数组的大小,但可以将其视为常数;就像你把比较运算符也当作常数一样。例如,在对bignum排序时,比较运算符也将取决于整数大小

    假设您的数组是整数数组,您可以使用来在线性时间内排序
    B
    O(n)
    。Wikipedia有一个很好的编写和python代码示例


    基数排序与元素数成线性关系。虽然它也依赖于数组的大小,但可以将其视为常数;就像你把比较运算符也当作常数一样。例如,在对bignum排序时,比较运算符也将取决于整数大小

    您还可以修改插入排序想法:

    0)执行所有必要的测试:如果数组为空,如果较大的数组有足够的空间

    1) 在大数组的末尾添加小数组

    2) 执行常规插入排序,但从小数组的开头开始

    • 这里,如果您执行快速排序或其他“最快”的O(n*log\n)排序,问题在于您没有使用两个数组都已排序的事实。对于插入排序,您使用的是数组B被排序的事实(但不是A被排序的事实,所以我们可能应该发展这个想法,修改插入排序以使用该事实)

    您还可以修改插入排序想法:

    0)执行所有必要的测试:如果数组为空,如果较大的数组有足够的空间

    1) 在大数组的末尾添加小数组

    2) 执行常规插入排序,但从小数组的开头开始

    • 这里,如果您执行快速排序或其他“最快”的O(n*log\n)排序,问题在于您没有使用两个数组都已排序的事实。对于插入排序,您使用的是数组B被排序的事实(但不是A被排序的事实,所以我们可能应该发展这个想法,修改插入排序以使用该事实)

    有没有办法用O(n)表示呢?…我正在寻找的东西我不明白下面这句话:“找到数组B按排序的方式”。您的意思是要对两个数组进行排序吗?-考虑到您不知道整数范围的任何限制,可以在O(nlogn)[并且不比那更好…]下完成。@Anna是的,如果是整数排序,它可以比
    O(n lgn)
    更快。@notnoop,它不是O(nglogn)。如果您使用整数范围(例如,64位),那么基数排序的复杂度将是O(64*n),其中64>=log(n)[因为该范围内有2^64个整数。]有没有办法在O(n)中进行排序???…我正在寻找的东西我不理解下面的句子:“找到数组B按排序顺序排序的方式”。您的意思是要对两个数组进行排序吗?-考虑到您不知道整数范围的任何限制,可以在O(nlogn)[并且不比那更好…]下完成。@Anna是的,如果是整数排序,它可以比
    O(n lgn)
    更快。@notnoop,它不是O(nglogn)