辣鸡程序员　2　人　赞同了该文章　这是一次学习的记录。　参考书籍:《算法导论》　问题引出:　将两幅已经排序好的poke牌进行合并排序。　例如:　vector　<　int　>　a　=　{　1　,　7　,　13　,　20　,　35　};　vector　<　int　>　b　=　{　2　,　8　,　9　,　10　,　11　};　将这两个有序数组合并排序。　个人想出来的方法:　两个数值按下标从小到大分别取数,比较大小,小的先记录,下标后移,继续与上一轮较大的数进行比较,小的数先记录,下标后移,直到其中一个数组的下标到达末尾位置,剩余的较长的那个数组直接进行收尾工作。　c++代码:　#include　　#include　　using　namespace　std　;　vector　<　int　>　UnionSort　(　vector　<　int　>　a　,　vector　<　int　>　b　)　{　vector　<　int　>　Dst　(　a　.　size　()　+　b　.　size　());　//目标数组。　unsigned　int　i　=　0　,　j　=　0　,　s　=　0　;　while　((　i　<　a　.　size　j　<　b　.　size　())　)　//从下标0开始一次进行比较　{　if　(　a　[　i　]　<=　b　[　j　])　{　Dst　[　s　]　=　a　[　i　];　//较小的记录　i　++　;　//下标后移　s　++　;　//目标数组下标后移　}　else　{　Dst　[　s　]　=　b　[　j　];　j　++　;　s　if　(　i　==　a　.　size　())　//执行收尾工作,将较长数组里面的数直接依次放入目标数组　{　for　(　j　;　j　<　b　.　size　();　j　++　)　{　Dst　[　s　]　=　b　[　j　];　s　else　{　for　(　i　;　i　<　a　.　size　();　i　++　)　{　Dst　[　s　]　=　a　[　i　];　s　return　Dst　;　}　测试代码:　int　main　()　{　vector　<　int　>　a　=　{　1　,　7　,　13　,　20　,　35　};　vector　<　int　>　b　=　{　2　,　8　,　9　,　10　,　11　};　vector　<　int　>　Dst　=　UnionSort　(　a　,　b　);　for　(　vector　<　int　>::　iterator　i　=　Dst　.　begin　();　i　!=　Dst　.　end　();　i　++　)　{　cout　<<　*　i　system　(　"pause"　);　}　测试结果:　时间复杂度为O(n)。　　赞同　2　　　添加评论　　分享　　喜欢　　收藏　　申请转载