合并已排序的数组

条件:
两个数组分别已经升序排列。
要求:
合并两个数组并返回新的已经排序后的数组。
分析该题目,其要求与归并排序的实现思想相同。
归并排序的算法中,使用“分治”策略,而这道题的实现逻辑,仅需要用到归并算法中的“治”。
function mergeArray(first, sec) {var temp = new Array(first.length + sec.length)var t = 0var i = 0var j = 0// 取较短的数组作为loop条件var mid = (first.length <= sec.length) ? first.length - 1 : sec.length - 1while (i <= mid && j <= mid) {//关键的逻辑在于这行temp[t++] = (first[i] < sec[j]) ? first[i++] : sec[j++]}// 将first数组中剩余的元素追加到tempwhile (i <= first.length - 1) {temp[t++] = first[i++]}// 将sec数组中剩余的元素追加到tempwhile (j <= sec.length - 1) {temp[t++] = sec[j++]}return temp}
前面的实现,并未能去除重复的元素,增加题目的要求。
合并后的数组,如果包含相同元素,则只保留一个。
function mergeArray(first, sec) {var temp = []var t = 0var i = 0var j = 0var k// 取较短的数组开始loopvar mid = (first.length <= sec.length) ? first.length - 1 : sec.length - 1while (i <= mid && j <= mid) {//关键的逻辑在于这行k = (first[i] < sec[j]) ? first[i++] : sec[j++]//过滤重复元素if (t > 0 && k == temp[t - 1]) continuetemp[t++] = k}// 将first数组中剩余的元素追加到tempwhile (i <= first.length - 1) {k = first[i++]if (t > 0 && k == temp[t - 1]) continuetemp[t++] = k}// 将sec数组中剩余的元素追加到tempwhile (j <= sec.length - 1) {k = sec[j++]if (t > 0 && k == temp[t - 1]) continuetemp[t++] = k}return temp}
以上的数组合并只是两个数组,继续引申出,多个有序数组进行合并,并去重排序。
评论
