Объединить два отсортированных массива в один отсортированный массив - PullRequest
0 голосов
/ 21 февраля 2011

Я пытаюсь написать функцию Matlab, которая объединяет 2 отсортированных массива, содержащих целые числа.Ввод 2 массива, каждый в порядке возрастания.Функция должна объединить элементы этих массивов и создать выходной массив таким образом, чтобы он содержал все элементы входного массива в порядке возрастания (включая кратности), а выходной массив также сортировался в порядке возрастания.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Самый простой подход в MATLAB - объединить два массива и sort их:

outArray = sort([in1(:); in2(:)]);

Однако, если вам нужно создать собственную функцию слияния без использования SORT , вы можете воспользоваться тем, что входные массивы уже отсортированы. Вот один из возможных способов сделать это:

function outArray = merge_sorted(in1,in2)
  inAll = [in1(:); flipud(in2(:))];  %# Combine the arrays, flipping the second
  N = numel(inAll);       %# The number of total input values
  iFront = 1;             %# Index for the front of the array
  iBack = N;              %# Index for the back of the array
  outArray = zeros(N,1);  %# Initialize the output array
  for iOut = 1:N                       %# Loop over the number of values
    if inAll(iFront) <= inAll(iBack)   %# If the front value is smaller ...
      outArray(iOut) = inAll(iFront);  %#    ...add it to the output ...
      iFront = iFront+1;               %#    ...and increment the front index
    else                               %# Otherwise ...
      outArray(iOut) = inAll(iBack);   %#    ...add the back value ...
      iBack = iBack-1;                 %#    ...and increment the back index
    end
  end
end
0 голосов
/ 17 марта 2017
function MergeTwoSortedArr(){
var arr1 = [23,45,67,89], arr2 = [34,40,50,87];
var temp=[];
var j=0;
var i=0;
while(temp.length ==(arr1.length + arr2.length)){
  if(arr1[i]< arr2[j]){
      temp.push(arr1[i]);
      i=== arr2.length-1?  temp.push(arr1[j]): i++;
  }else{
      temp.push(arr2[j]);
      j=== arr2.length -1 ?  temp.push(arr1[i]): j++;
  }
} 

return temp;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...