how to merge two sorted array in one sorted array in JavaScript without using sort()

后端 未结 24 947
我寻月下人不归
我寻月下人不归 2021-01-18 13:57

In this program merged two array and then sorted using temp.but this not correct method.because two array are sorted ,so method should be unique i.e. merging of two sorted i

相关标签:
24条回答
  • 2021-01-18 14:26

    Fastest Merge of 2 Sorting array

    function merge(a, b) {
      let i = 0,
        j = 0;
      let array = [];
      let counter = 0;
      while (i < a.length && j < b.length) {
        if (a[i] > b[j]) array[counter++] = b[j++];
        else if (a[i] < b[j]) array[counter++] = a[i++];
        else (array[counter++] = a[i++]), j++;
      }
      while (j < b.length) {
        array[counter++] = b[j++];
      }
      while (i < a.length) {
        array[counter++] = a[i++];
      }
      return array;
    }
    console.log(merge([1, 3], [2, 4, 5]));
    
    console.log(merge([1, 3, 123, 125, 127], [2, 41, 50]));

    0 讨论(0)
  • 2021-01-18 14:27

    Merging two sorted arrays.

    function merge(a, b) {
      let i = a.length - 1;
      let j = b.length - 1;
      let k = i + j + 1; //(a.length + b.length - 1) == (i + j + 2 - 1) == (i + j + 1)
    
      while (k >= 0) {
        if (a[i] > b[j] || j < 0) {
          a[k] = a[i];
          i--;
        } else {
          a[k] = b[j];
          j--;
        }
        k--;
      }
      return a;
    }
    
    console.log(merge([1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21], [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]));

    More compact code:

    function merge(a, b) {
      let i = a.length - 1;
      let j = b.length - 1;
      let k = i + j + 1; //(a.length + b.length - 1) == (i + j + 2 - 1) == (i + j + 1)
    
      while (k >= 0) {
        a[k--] = (a[i] > b[j] || j < 0) ? a[i--] : b[j--];
      }
      return a;
    }
    
    console.log(merge([1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21], [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]));

    0 讨论(0)
  • 2021-01-18 14:27

    can do with es6 spread operator

    let a=[1,2,3,5,9]
    let b=[4,6,7,8]
    
    let newArray=[...a,...b].sort()
    console.log(newArray)

    0 讨论(0)
  • 2021-01-18 14:28

    // Everything fine but small mistake down there
    
    function sortedArray(a,b){
        for(var i=0;i<b.length;i++){
            a.push(b[i]);
        }
        //console.log(a);
    for(i=0;i<a.length;i++)
        {
            for(j=i+1;j<a.length;j++)
            {
                if(a[i]>a[j])
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
        
        //<!--You did a mistake here you have loop through for to get array elements-->
        for(i=0;i<a.length;i++){
        return a;
        }
    }
    console.log(sortedArray([1,2,3,5,9],[4,6,7,8]));

    0 讨论(0)
  • 2021-01-18 14:30

    Merge two sorted arrays - Answer with comments

    const mergeArrays = (arr1, arr2) => { // function to merge two sorted arrays
      if (!arr1 || !arr2) { // if only one array is passed
        return "Invalid Array" // message is returned
      }
      if (arr1.length < 1) { // if first array is empty
        if (arr2.length < 1) { // if second array is empty
          return "Both arrays are empty" // returns message
        }
        return arr2; // else returns second array
      }
      if (arr2.length < 1) { // if second array is empty
        if (arr1.length < 1) { // if both arrays are empty
          return "Both arrays are empty" // returns message
        }
        return arr1; // else returns first array
      }
      let small = []; // initializes empty array to store the smaller array
      let large = []; // initializes empty array to store the larger array
      arr1.length < arr2.length ? [small, large] = [arr1, arr2] : [small, large] = [arr2, arr1]; // stores smaller array in small and larger array in large
      const len1 = small.length; // stores length of small in len1
      const len2 = large.length; // stores length of large in len2
      let ansArr = []; // initializes an empty array to create the merged array
      let i = 0; // initializes i to 0 to iterate through small
      let j = 0; // initializes j to 0 to iterate through large
      while (small[i]!==undefined && large[j]!==undefined) { //while element in arrays at i and j position respectively exists
        if(small[i] < large[j]) { // if element from small is smaller than element in large
          ansArr.push(small[i]); // add that element to answer
          i++; // move to the next element
        } else { // if element from large is smaller than element in small
          ansArr.push(large[j]); // add that element to answer
          j++; // move to the next element
        }
      }
      if (i < len1) { // if i has not reached the end of array
        ansArr = [...ansArr, ...small.splice(i)]; // add the rest of the elements at the end of the answer
      } else { // if j has not reached the end of array
        ansArr = [...ansArr, ...large.splice(j)]; // add the rest of the elements at the end of the answer
      }
      return ansArr; // return answer
    }
    
    console.log(mergeArrays([0,1,5], [2,3,4,6,7,8,9])); // example
    
    0 讨论(0)
  • 2021-01-18 14:30

    Shortest Merge Sorted arrays without sort() plus, without using third temp array.

    function mergeSortedArray (a, b){
      let index = 0;
    
      while(b.length > 0 && a[index]) {
        if(a[index] > b[0]) {
          a.splice(index, 0, b.shift());
        }
        index++;
      }
      return [...a, ...b];
    }
    mergeSortedArray([1,2,3,5,9],[4,6,7,8])
    
    0 讨论(0)
提交回复
热议问题