如何用vs的c 做网站/如何做好企业推广
默认一般会采用数组先合并,在排序
时间复杂度会在o(n) -o(n*n) 之间
我想了个其他的思路 对数组1 和数组2 元素从头开始进行一次对比,小的放入结果集合,
直到两个数组的元素都加入结果集合
这样的时间复杂度 在o(n) 只要比较两个数组较短的长度的次数
代码
import java.util.ArrayList;/*** 两个有序数组合并到 一个新排序数组* @version * @author flyer 2018年12月6日下午1:20:28* @since 1.8*/
class QuickSort {public static void main(String[] agrs) {int a[] = { 1, 3, 8 };int b[] = { 2, 6, 6, 10, 15 };//生产的处理结果的数组ArrayList<Integer> t = new ArrayList<>();//查看a数组里面处理到的位置int ak = 0;//查看b数组里面处理到的位置int bk = 0;//a数组里面元素是否都已经被处理boolean isAOk = false;boolean isBOk = false;//a ,b数组都已经处理结束boolean isOk = false;while (!isOk) {if (!isAOk && a[ak] <= b[bk]) {t.add(a[ak]);System.out.print(a[ak]);if (ak < a.length - 1)ak++;else {isAOk = true;//a处理完,直接把b数组剩下的加进去即可for (int tmp = bk; tmp < b.length; tmp++) {t.add(b[tmp]);System.out.print(b[tmp]);}//a,b都处理完 程序结束isOk = true;}}else if (!isBOk && a[ak] > b[bk]) {t.add(b[bk]);System.out.print(b[bk]);if (bk < b.length - 1)bk++;else {isBOk = true;for (int tmp = ak; tmp < a.length; tmp++) {t.add(a[tmp]);System.out.print(a[tmp]);}isOk = true;}}}System.out.println(" result:");for (int i = 0; i < t.size(); i++) {System.out.print(t.get(i) + " ");}}}