Reorder the position of the words in alphabetical order

07 Jun, 2022
Given an array arr[] of strings, the task is to reorder the strings lexicographically and print their positions in the original list. 
Examples: 
Input: arr[] = {“zxc”, “efg”, “jkl”} Output: 2 3 1 The sorted list will be {“efg”, “jkl”, “zxc”} and their original positions were 2, 3 and 1 respectively. 
Input: arr[] = {“live”, “place”, “travel”, “word”, “sky”} Output: 1 2 5 3 4  
Approach: Assign all the words with an integer number equal to their position in the array. Then they sort the list of words lexicographically and their positions are altered, and therefore, their positions are printed starting from the first word in the sorted list.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// CPP implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to print the ordering of wordsvoid reArrange(string words[], int n){     // Creating list of words and assigning    // them index numbers    map<string, int> mp;    for (int i = 0; i < n; i++)        mp[words[i]] = i + 1;     // Sort the list of words    // lexicographically    sort(words, words + n);     // Print the ordering    for (int i = 0; i < n; i++)        cout << mp[words[i]] << " ";} // Driver Codeint main(){    string words[] = { "live", "place", "travel", "word", "sky" };    int n = sizeof(words) / sizeof(words[0]);    reArrange(words, n);} // This code is contributed by// Surendra_Gangwar
// Java implementation of the approachimport java.util.*;class GFG {     // Function to print the ordering of words    static void reArrange(String words[], int n)    {         // Creating list of words and assigning        // them index numbers        HashMap<String, Integer> freq = new HashMap<>();        for (int i = 0; i < n; i++) {            freq.put(words[i], (i + 1));        }         // Sort the list of words        // lexicographically        Arrays.sort(words);         // Print the ordering        for (int i = 0; i < n; i++)            System.out.print(freq.get(words[i]) + " ");    }     // Driver Code    public static void main(String[] args)    {        String words[] = { "live", "place", "travel", "word", "sky" };        int n = words.length;        reArrange(words, n);    }}
# Python3 implementation of the approach # Function to print the ordering of wordsdef reArrange(words, n):    # Creating list of words and assigning    # them index numbers    mp = {}    for i in range(n):        mp[words[i]] = i + 1     # Sort the list of words    # lexicographically    words.sort();     # Print the ordering    for i in range(n):        print(mp[words[i]], end = " ") # Driver Code words = [ "live", "place", "travel", "word", "sky" ]n = len(words)reArrange(words, n); # This code is contributed by# Rajnis09
// C# implementation of the approachusing System;using System.Collections.Generic; class GFG {     // Function to print the ordering of words    static void reArrange(String[] words, int n)    {         // Creating list of words and assigning        // them index numbers        Dictionary<String, int> freq = new Dictionary<String, int>();        for (int i = 0; i < n; i++) {            freq.Add(words[i], (i + 1));        }         // Sort the list of words        // lexicographically        Array.Sort(words);         // Print the ordering        for (int i = 0; i < n; i++)            Console.Write(freq[words[i]] + " ");    }     // Driver Code    public static void Main(String[] args)    {        String[] words = { "live", "place", "travel", "word", "sky" };        int n = words.Length;        reArrange(words, n);    }} // This code contributed by Rajput-Ji
<?php// PHP implementation of the approach     // Function to print the ordering of words    function reArrange($words, $n)    {         // Creating list of words and assigning        // them index numbers        $freq = array();        for ($i = 0; $i < $n; $i++)        {            $freq[$words[$i]] = ($i + 1) ;        }         // Sort the list of words        // lexicographically        sort($words);         // Print the ordering        for ($i = 0; $i < $n; $i++)            echo $freq[$words[$i]], " " ;    }     // Driver Code    $words = array( "live", "place", "travel", "word", "sky" );    $n = count($words);    reArrange($words, $n);         // This code is contributed by Ryuga?>
<script> // Javascript implementation of the approach // Function to print the ordering of wordsfunction reArrange(words, n){     // Creating list of words and assigning    // them index numbers    var mp = new Map();    for (var i = 0; i < n; i++)        mp.set(words[i], i + 1);     // Sort the list of words    // lexicographically    words.sort();     // Print the ordering    for (var i = 0; i < n; i++)    {        document.write(mp.get(words[i])+" ");    }} // Driver Codevar words = ["live", "place", "travel", "word", "sky"];var n = words.length;reArrange(words, n);  </script>
1 2 5 3 4
 
Time Complexity: O(n * log n)
Auxiliary Space: O(n)
ankthon
Rajput-Ji
SURENDRA_GANGWAR
Rajnis09
rrrtnx
vansikasharma1329
lexicographic-ordering
Arrays
Mathematical
School Programming
Sorting
Strings
Arrays
Strings
Mathematical
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.