Sorting given character Array using Linked List
Given an array arr[] containing N lowercase English alphabets, the task is to sort this array arr[] using a linked list.
Examples:
Input: arr[] = [‘b’, ‘b’, ‘c’, ‘c’, ‘d’, ‘e’, ‘f’, ‘b’, ‘b’, ‘a’, ‘a’]
Output: a->a->b->b->b->b->c->c->d->e->f->NULLInput: arr[] = [‘g’, ‘e’, ‘e’, ‘k’, ‘s’, ‘f’, ‘o’, ‘r’, ‘g’, ‘e’, ‘e’, ‘k’, ‘s’]
Output: e->e->e->e->f->g->g->k->k->o->r->s->s->NULL
Approach: To solve this problem, first create the linked list from the character array. After the linked list has been formed, sort it using bubble sort.
Below is the implementation of the above approach:
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 int 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 << 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; } |
Output
a -> a -> b -> b -> b -> b -> c -> c -> d -> e -> f ->
Time Complexity: O(N2)