Algorithm 从2个数组中创建一个已排序的数组
有2个数组用于ex。 A=[20,4,21,6,3] B=[748,32,48,92,23……] 假设B非常大,可以容纳数组A的所有元素 查找数组B的排序方式(也包含数组A的所有元素)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中 使用快速排序算法 这听起来像是合并排序算法。你会发现
以最有效的方式设计算法。闻起来像家庭作业。基本上,从末尾开始写入数组B,在A和B中记录您正在阅读的位置。闻起来像是家庭作业。基本上,从末尾开始写入数组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
希望这有帮助,祝你好运
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被排序的事实,所以我们可能应该发展这个想法,修改插入排序以使用该事实)
- 这里,如果您执行快速排序或其他“最快”的O(n*log\n)排序,问题在于您没有使用两个数组都已排序的事实。对于插入排序,您使用的是数组B被排序的事实(但不是A被排序的事实,所以我们可能应该发展这个想法,修改插入排序以使用该事实)
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)