Ordenar la array de caracteres dada usando la lista enlazada

Dada una array arr[] que contiene N alfabetos ingleses en minúsculas, la tarea es ordenar esta array arr[] usando una lista enlazada.

Ejemplos:  

Entrada: arr[] = [‘b’, ‘b’, ‘c’, ‘c’, ‘d’, ‘e’, ​​’f’, ‘b’, ‘b’, ‘a’, ‘a’ ] 
Salida: a->a->b->b->b->b->c->c->d->e->f->NULL

Entrada: arr[] = [‘g’, ‘e’, ​​’e’, ​​’k’, ‘s’, ‘f’, ‘o’, ‘r’, ‘g’, ‘e’, ​​’e’ , ‘k’, ‘s’]
Salida: e->e->e->e->f->g->g->k->k->o->r->s->s-> NULO

 

Enfoque: para resolver este problema, primero cree la lista vinculada a partir de la array de caracteres. Después de que se haya formado la lista enlazada, ordénela usando la ordenación de burbuja .

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

C++

#include <iostream>
using namespace std;
 
// Structure for a node
struct Node {
    int data;
    Node* next;
} Node;
 
// Function to swap the nodes
struct Node* swap(struct Node* ptr1, struct Node* ptr2)
{
    struct Node* tmp = ptr2->next;
    ptr2->next = ptr1;
    ptr1->next = tmp;
    return ptr2;
}
 
// Function to sort the list
void bubbleSort(struct Node** head, int count)
{
    struct Node** h;
    int i, j, swapped;
 
    for (i = 0; i <= count; i++) {
 
        h = head;
        swapped = 0;
 
        for (j = 0; j < count - i - 1; j++) {
 
            struct Node* p1 = *h;
            struct Node* p2 = p1->next;
 
            if (p1->data > p2->data) {
 
                // Update the link after swapping
                *h = swap(p1, p2);
                swapped = 1;
            }
 
            h = &(*h)->next;
        }
 
        // Break if the loop ended
        // without any swap
        if (swapped == 0)
            break;
    }
}
 
// Function to print the list
void printList(struct Node* n)
{
    while (n != NULL) {
        cout << char(n->data) << " -> ";
        n = n->next;
    }
    cout << "NULL" << endl;
}
 
// Function to insert a struct Node
// at the end of a linked list
void insert(struct Node** head, int data)
{
    struct Node* ptr = new struct Node();
 
    ptr->data = data;
    ptr->next = NULL;
    if (*head == NULL) {
        *head = ptr;
    }
    else {
        struct Node* ptr1 = *head;
        while (ptr1->next != NULL) {
            ptr1 = ptr1->next;
        }
        ptr1->next = ptr;
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 'b', 'b', 'c', 'c', 'd', 'e',
                  'f', 'b', 'b', 'a', 'a' };
    int list_size, i;
 
    // start with empty linked list
    struct Node* start = NULL;
    list_size = sizeof(arr) / sizeof(arr[0]);
 
    // Create linked list from the array arr[]
    for (i = 0; i < list_size; i++)
        insert(&start, arr[i]);
 
    // sort the linked list
    bubbleSort(&start, list_size);
 
    // Print list after sorting
    printList(start);
 
    return 0;
}
Producción

a -> a -> b -> b -> b -> b -> c -> c -> d -> e -> f -> NULL

Complejidad del tiempo: O(N 2 )

Publicación traducida automáticamente

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