1.合并两个有序数组
两个有序定长数组array1和array2。
1>new一个新数组array3,长度为array1和array2的长度之和
2>两个指针,分别指向array1和array2的开始或者结尾
3>相互比较,直到一个数组遍历结束
4>将未遍历结束的数组添加到array3中
代码:a,b为有序数组,c为新建数组,且长度为a,b数组之和,指针从头部开始
int i = 0; int j = 0; int k = 0; for (; i < c.length && j < a.length && k < b.length; i++) { if (a[j] <= b[k]) { c[i] = a[j]; j++; } else { c[i] = b[k]; k++; } } if (j == a.length) { for (; i < c.length; k++, i++) { c[i] = b[k]; } } if (k == b.length) { for (; i < c.length; j++, i++) { c[i] = a[j]; } }
两个有序定长数组array1和array2,array1的长度为M+N,其中只有长度M是有效数据,array2的长度为N
两个有序非定长数组array1和array2,array1的长度为M,array2的长度为N,扩张数组array1,使其长度为M+N
1>两个指针,分别指向array1和array2有效数据的结尾
2>相互比较,直到一个数组遍历结束
3>将另外一个未遍历结束的数组添加到array1的开头
代码:a,b为有序数组,a数组长度为a有效位置长度和b长度之和,flag为有效位置
int i = a.length - 1; int j = flag; int k = b.length - 1; for (; i >= 0 && j >= 0 && k >= 0; i--) { if (a[j] >= b[k]) { a[i] = a[j]; j--; } else { a[i] = b[k]; k--; } } if (j == -1) { for (; i >= 0; k--, i--) { a[i] = b[k]; } } if (k == -1) { for (; i >= 0; j--, i--) { a[i] = a[j]; } }