Ordenar una secuencia de enteros

Dada una array , arr[] de tamaño N cuyos elementos, de izquierda a derecha, deben leerse como un flujo entrante de enteros, la tarea es clasificar el flujo de enteros e imprimir en consecuencia.

Ejemplos:

Entrada: arr[] = {2, 4, 1, 7, 3}
Salida: 1 2 3 4 7
Explicación: 
Primer elemento de la secuencia: 2 → Lista ordenada: {2}
Segundo elemento de la secuencia: 4 → Lista ordenada : {2, 4}
Tercer elemento del flujo: 1 → Lista ordenada: {1, 2, 4}
Cuarto elemento del flujo: 7 → Lista ordenada: {1, 2, 4, 7}
Quinto elemento del flujo: 3 → Lista ordenada: {1, 2, 3, 4, 7}

Entrada: arr[] = {4, 1, 7, 6, 2}
Salida: 1 2 4 6 7
Explicación:
Primer elemento de la secuencia: 4 → Lista ordenada: {4}
Segundo elemento de la secuencia: 1 → Lista ordenada : {1, 4}
Tercer elemento del flujo: 7 → Lista ordenada: {1, 4, 7}
Cuarto elemento del flujo: 6 → Lista ordenada: {1, 4, 6, 7}
Quinto elemento del flujo: 2 → Lista ordenada: {1, 2, 4, 6, 7}

Enfoque ingenuo: el enfoque más simple es <a href=”https://www.geeksforgeeks.org/c-program-to-traverse-an-array/”>recorrer la array y, para cada elemento de la array, escanear linealmente la array y encuentre la posición correcta de ese elemento y colóquelo en la array.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to sort a stream of integers
void Sort(vector<int>& ans, int num)
{
    // Stores the position of
    // array elements
    int pos = -1;
 
    // Traverse through the array
    for (int i = 0; i < ans.size(); i++) {
 
        // If any element is found to be
        // greater than the current element
        if (ans[i] >= num) {
            pos = i;
            break;
        }
    }
 
    // If an element > num is not present
    if (pos == -1)
        ans.push_back(num);
 
    // Otherwise, place the number
    // at its right position
    else
        ans.insert(ans.begin() + pos, num);
}
 
// Function to print the sorted stream of integers
void sortStream(int arr[], int N)
{
    // Stores the sorted stream of integers
    vector<int> ans;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        // Function Call
        Sort(ans, arr[i]);
 
        // Print the array after
        // every insertion
        for (int i = 0; i < ans.size(); i++) {
            cout << ans[i] << " ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 4, 1, 7, 6, 2 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    sortStream(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to sort a stream of integers
static void Sort(Vector<Integer> ans, int num)
{
     
    // Stores the position of
    // array elements
    int pos = -1;
 
    // Traverse through the array
    for(int i = 0; i < ans.size(); i++)
    {
         
        // If any element is found to be
        // greater than the current element
        if (ans.get(i) >= num)
        {
            pos = i;
            break;
        }
    }
 
    // If an element > num is not present
    if (pos == -1)
        ans.add(num);
 
    // Otherwise, place the number
    // at its right position
    else
        ans.add(pos, num);
}
 
// Function to print the sorted stream of integers
static void sortStream(int arr[], int N)
{
     
    // Stores the sorted stream of integers
    Vector<Integer> ans = new Vector<Integer>();
 
    // Traverse the array
    for(int i = 0; i < N; i++)
    {
         
        // Function Call
        Sort(ans, arr[i]);
 
        // Print the array after
        // every insertion
        for(int j = 0; j < ans.size(); j++)
        {
            System.out.print(ans.get(j) + " ");
        }
        System.out.println();
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int arr[] = { 4, 1, 7, 6, 2 };
    int N = arr.length;
 
    sortStream(arr, N);
}
}
 
// This code is contributed by Amit Katiyar

Python3

# Python program for the above approach
 
# Function to sort a stream of integers
def Sort(ans, num):
   
    # Stores the position of
    # array elements
    pos = -1;
 
    # Traverse through the array
    for  i in range(len(ans)):
 
        # If any element is found to be
        # greater than the current element
        if (ans[i] >= num):
            pos = i;
            break;
 
    # If an element > num is not present
    if (pos == -1):
        ans.append(num);
 
    # Otherwise, place the number
    # at its right position
    else:
        ans.insert(pos,num);
    return ans;
 
# Function to print the sorted stream of integers
def sortStream(arr, N):
   
    # Stores the sorted stream of integers
    ans = list();
 
    # Traverse the array
    for i in range(N):
 
        # Function Call
        ans = Sort(ans, arr[i]);
 
        # Print the array after
        # every insertion
        for j in range(len(ans)):
            print(ans[j], end = " ");
 
        print();
 
# Driver Code
if __name__ == '__main__':
    arr = [4, 1, 7, 6, 2];
    N = len(arr);
 
    sortStream(arr, N);
 
# This code is contributed by 29AjayKumar

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG{
 
// Function to sort a stream of integers
static void Sort(List<int> ans, int num)
{
     
    // Stores the position of
    // array elements
    int pos = -1;
 
    // Traverse through the array
    for(int i = 0; i < ans.Count; i++)
    {
         
        // If any element is found to be
        // greater than the current element
        if (ans[i] >= num)
        {
            pos = i;
            break;
        }
    }
 
    // If an element > num is not present
    if (pos == -1)
        ans.Add(num);
 
    // Otherwise, place the number
    // at its right position
    else
        ans.Insert(pos, num);
}
 
// Function to print the sorted stream of integers
static void sortStream(int []arr, int N)
{
     
    // Stores the sorted stream of integers
    List<int> ans = new List<int>();
 
    // Traverse the array
    for(int i = 0; i < N; i++)
    {
         
        // Function Call
        Sort(ans, arr[i]);
 
        // Print the array after
        // every insertion
        for(int j = 0; j < ans.Count; j++)
        {
            Console.Write(ans[j] + " ");
        }
        Console.WriteLine();
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    int []arr = { 4, 1, 7, 6, 2 };
    int N = arr.Length;
    sortStream(arr, N);
}
}
 
// This code is contributed by 29AjayKumar
Producción: 

4 
1 4 
1 4 7 
1 4 6 7 
1 2 4 6 7

 

Tiempo Complejidad: O(N 2 )
Espacio Auxiliar: O(N)

Enfoque eficiente: para optimizar el enfoque anterior, la idea es utilizar una búsqueda binaria para encontrar la posición correcta de cada elemento en la lista ordenada. Siga los pasos a continuación para resolver el problema:

  • Inicialice una array ans[] para almacenar el flujo final de números ordenados.
  • Recorra la array arr[] como un flujo de números usando una variable i y realice los siguientes pasos:
    • Si la array ans está vacía, inserte arr[i] en ans .
    • De lo contrario, encuentre la posición correcta de arr[i] en la array ya ordenada ans[] usando lower_bound() y presione arr[i] en su posición correcta.
  • Después de completar los pasos anteriores, imprima la array ans[] .

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to sort a stream of integers
void Sort(vector<int>& ans, int num)
{
    // If the element is greater than
    // all the elements in the sorted
    // array, then it push at the back
    if (lower_bound(ans.begin(),
                    ans.end(), num)
        == ans.end()) {
        ans.push_back(num);
    }
 
    // Otherwise, find its correct position
    else {
        int pos = lower_bound(ans.begin(),
                              ans.end(),
                              num)
                  - ans.begin();
 
        // Insert the element
        ans.insert(ans.begin() + pos,
                   num);
    }
}
 
// Function to print the sorted stream of integers
void sortStream(int arr[], int N)
{
    // Stores the sorted stream of integers
    vector<int> ans;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        // Function Call
        Sort(ans, arr[i]);
 
        // Print the array after
        // every insertion
        for (int i = 0; i < ans.size(); i++) {
            cout << ans[i] << " ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 4, 1, 7, 6, 2 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    sortStream(arr, N);
 
    return 0;
}
Producción: 

4 
1 4 
1 4 7 
1 4 6 7 
1 2 4 6 7

 

Complejidad de tiempo: O(N*log N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por punit_tiwari 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 *