JS程式設計——合併兩個有序陣列
阿新 • • 發佈:2019-02-18
問題描述:已知有兩個升序排序的陣列arr1,arr2,現要求將其合併為一個單調非遞減的陣列,並將其輸出。
解決思路:歸併排序
時間複雜度:O(n)
程式碼:
function mergeArray(arr1,arr2){ var ind1=0; //標記arr1的對比元素的初始索引值 var ind2=0; //標記arr2的對比元素的初始索引值 var arr=[]; //作為輸出的新陣列 while(ind1<arr1.length && ind2<arr2.length){ //當arr1和arr2元素均未全部存入arr中,則從第一個元素開始進行比較,將較小的那個元素存入arr if(arr1[ind1]<=arr2[ind2]){ arr.push(arr1.slice(ind1,ind1+1)[0]); //若arr1的對比元素小於arr2的對比元素,則將arr1的對比元素存入arr中 ind1++; }else{ arr.push(arr2.slice(ind2,ind2+1)[0]); ind2++; } } while(ind1<arr1.length){ //當arr2的元素已全部存入arr中,則直接將arr1剩餘的所有元素依次存入arr arr.push(arr1.slice(ind1,ind1+1)[0]); ind1++; } while(ind2<arr2.length){ //當arr1的元素已全部存入arr中,則直接將arr2剩餘的所有元素依次存入arr arr.push(arr2.slice(ind2,ind2+1)[0]); ind2++; } return arr; }
結果測試: