从2个数组中创建排序数组

时间:2009-11-07 14:30:24

标签: algorithm data-structures

前面有两个数组。 A = [20,4,21,6,3] B = [748,32,48,92,23 ......]

假设B非常大并且可以保存数组A的所有元素。

找到数组B所在的方式(包含数组A的所有元素)排序顺序。

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

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

鉴于您的数组是整数数组,您可以使用Radix sort algorithm以线性时间BO(n)进行排序。维基百科有一个很好的写作和示例python代码。

基数排序相对于元素数量是线性的。虽然它也依赖于数组的大小,但你把它当作一个常数;就像你将比较运算符也保持不变一样。例如,在对bignum进行排序时,比较运算符也将取决于整数大小!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试一试:

  1. 将数组A合并到B中。

  2. 使用快速排序算法。

答案 4 :(得分:0)

  1. 在从A到B添加元素之前,检查是否超过数组的大小,如果不是将A合并到B

  2. 然后快速排序,

  3. 但是,如果您只想将两个数组合并到一个新数组中,其中新数组具有两者的组合长度。这是一个快速启动,试试你是否可以从这里前进......

    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;
    }
    

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

答案 5 :(得分:0)

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

0)进行所有必要的测试:如果数组为null,则更大的数组有足够的空间

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

2)进行正常插入排序,但在小数组的开头

开始
  • 这里如果你做quick_sort或其他一些“最快”的O(n * log_n)排序,问题是你没有使用这两个数组都被排序的事实。使用插入排序你正在使用事实,那个数组B是排序的(但不是A被排序的事实,所以也许我们应该开发这个想法并修改插入排序以使用这个事实。)