Programa Php para ordenar números dados para formar el número más grande

Dada una serie de números, organícelos de manera que produzca el mayor valor. Por ejemplo, si los números dados son {54, 546, 548, 60}, el arreglo 6054854654 da el valor más grande. Y si los números dados son {1, 34, 3, 98, 9, 76, 45, 4}, entonces el arreglo 998764543431 da el mayor valor.

Una solución simple que nos viene a la mente es ordenar todos los números en orden descendente, pero simplemente ordenar no funciona. Por ejemplo, 548 es mayor que 60, pero en la salida 60 viene antes que 548. Como segundo ejemplo, 98 es mayor que 9, pero 9 viene antes que 98 en la salida.

Entonces, ¿cómo lo hacemos? La idea es utilizar cualquier algoritmo de clasificación basado en comparación
En el algoritmo de clasificación usado, en lugar de usar la comparación predeterminada, escriba una función de comparación myCompare() y utilícela para ordenar números. 

Dados dos números X e Y , ¿cómo debería myCompare() decidir qué número poner primero? Comparamos dos números XY (Y añadido al final de X) e YX (X añadido al final de Y). Si XY es más grande, entonces X debería aparecer antes que Y en la salida, de lo contrario, Y debería aparecer antes. Por ejemplo, sean X e Y 542 y 60. Para comparar X e Y, comparamos 54260 y 60542. Como 60542 es mayor que 54260, ponemos Y primero.

A continuación se muestra la implementación del enfoque anterior. 
Para mantener el código simple, los números se consideran strings, se usa el vector en lugar de una array normal. 

A continuación se muestra la implementación del enfoque anterior: 

PHP

<?php
// Given an array of numbers, program 
// to arrange the numbers to form the
// largest number 
  
// A comparison function which is used
// by sort() in printLargest() 
function myCompare($X, $Y) 
{ 
    // First append Y at the end of X 
    $XY = $Y.$X; 
      
    // Then append X at the end of Y 
    $YX = $X.$Y; 
      
    // Now see which of the two formed
    // numbers is greater 
    return strcmp($XY, $YX) > 0 ? 1: 0; 
} 
  
// The main function that prints the
// arrangement with the largest value. 
// The function accepts a vector of strings 
function printLargest($arr) 
{ 
    // Sort the numbers using library sort 
    // function. The function uses our 
    // comparison function myCompare() to 
    // compare two strings. 
    usort($arr, "myCompare"); 
  
    for ($i = 0; $i < count($arr) ; $i++ ) 
        echo $arr[$i]; 
} 
  
// Driver Code
$arr = array("54", "546", "548", "60"); 
printLargest($arr); 
  
// This code is contributed by rathbhupendra
?>

Producción:

6054854654

Complejidad de tiempo:  O(nlogn), se considera que la clasificación tiene una complejidad de tiempo de ejecución de O(nlogn) y el ciclo for se ejecuta en tiempo O(n).
Espacio Auxiliar: O(1).

Consulte el artículo completo sobre Organizar números dados para formar el número más grande | ¡ Establezca 1 para más detalles!

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *