http://oj.leetcode.com/problems/merge-sorted-array/
两个有序数组A和B的归并排序,将结果存到A中。因为已知两数组长度且A的数组足够大,所以倒着处理,如果正着的话,会有好多往后挪的操作。
#include <iostream> using namespace std; class Solution { public: void merge(int A[], int m, int B[], int n) { if(m<0|| n<0) return; if(n == 0) return ; if(m ==0) { for(int i = 0;i<n;i++) A[i] = B[i]; } int a_pointer = m -1; int b_pointer = n-1; int c_pointer = m+n-1; while(a_pointer!=-1 && b_pointer!= -1) { while(a_pointer != -1 &&b_pointer!= -1 && A[a_pointer]>=B[b_pointer]) { A[c_pointer] = A[a_pointer]; c_pointer--; a_pointer--; } while(a_pointer!= -1 && b_pointer != -1 &&A[a_pointer]<B[b_pointer] ) { A[c_pointer] = B[b_pointer]; c_pointer--; b_pointer--; } } if(a_pointer == -1 && c_pointer!= -1) for(int i = 0;i<=c_pointer;i++) A[i] = B[i]; for(int i = 0;i<=m+n-1;i++) cout<<A[i]<<endl; } }; int main() { Solution myS; int A[20] = {1,3,7,9,12,19,21}; int B[20] = {2,4,5,6,8,10}; myS.merge(A,3,B,0); return 0; }