Dadas dos matrices ordenadas arr1 y arr2, combine las dos matrices en una matriz ordenada.
arr1 = [1, 3, 5]
arr2 = [2, 4, 8, 9]
salida: [1, 2, 3, 4, 5, 8, 9]
Ideas:
1. Después de fusionar y clasificar, puede pensar en ello. (No se usa)
2. Ambas matrices están en orden, solo compare el tamaño en orden.
Puede declarar dos punteros de índice de matriz similares a la ordenación por combinación, atravesar las dos matrices respectivamente, comparar los valores, colocar el valor más grande (más pequeño) en la matriz de destino y continuar con el recorrido.
Java:
public static void main(String[] arg){
int[] arr1 = {
1, 3, 5};
int[] arr2 = {
2, 4, 8, 9};
int[] arrs = new int[arr1.length + arr2.length];
int i = arr1.length - 1, j = arr2.length - 1, k = arr1.length + arr2.length -1;
while (i >= 0 && j >= 0){
arrs[k--] = arr1[i] >= arr2[j] ? arr1[i--] : arr2[j--];
}
while (i >= 0){
arrs[k--] = arr1[i--];
}
while (j >= 0){
arrs[k--] = arr2[j--];
}
System.out.println(Arrays.toString(arrs));
}
Pitón:
def Order_sort(arr1, arr2):
rel = []
i = j = 0
while i < len(arr1) and j < len(arr2):
if arr1[i] <= arr2[j]:
rel.append(arr1[i])
i += 1
else:
rel.append(arr2[j])
j += 1
while i < len(arr1):
rel.append(arr1[i])
i += 1
while j < len(arr2):
rel.append(arr2[j])
j += 1
return rel
if __name__ == '__main__':
arr1 = [1, 3, 5, 8, 10]
arr2 = [2, 4, 8, 9]
print(Order_sort(arr1, arr2))
输出:[1, 2, 3, 4, 5, 8, 8, 9, 10]
La fusión a una nueva matriz se puede recorrer desde el principio o el final. Los siguientes dos bucles consideran los dos casos restantes de arr1 y arr2, y asignan los elementos restantes de la matriz a la nueva matriz. Python también puede comparar el primer elemento o el último elemento de cada ciclo, asignar los elementos requeridos a una nueva lista, eliminarlos y continuar atravesando.