Print array of strings in sorted order without copying one string into another - GeeksforGeeks

26 Apr, 2021
Given an array of n strings. The task is to print the strings in sorted order. The approach should be such that no string should be copied to another string during the sorting process.
Examples:
Input : {"geeks", "for", "geeks", "quiz")
Output : for geeks geeks quiz

Input : {"ball", "pen", "apple", "kite"}
Output : apple ball kite pen
Approach: It has the following steps: 
Maintain another array indexed_arr which stores/maintain the index of each string.We can apply any sorting technique to this indexed_arr.
Maintain another array indexed_arr which stores/maintain the index of each string.
We can apply any sorting technique to this indexed_arr.
An Illustration:  
--> str[] = {"world", "hello"}
--> corresponding index array will be
    indexed_arr = {0, 1}
--> Now, how the strings are compared and 
    accordingly values in indexed_arr are changed.
--> Comparison process:
    if (str[index[0]].compare(str[index[1]] > 0
        temp = index[0]
        index[0] = index[1]
        index[1] = temp

// after sorting values of
// indexed_arr = {1, 0}
--> for i=0 to 1
        print str[index[i]]

This is how the strings are compared and their 
corresponding indexes in the indexed_arr
are being manipulated/swapped so that after the sorting process
is completed, the order of indexes in the indexed_arr
gives us the sorted order of the strings.
C++
Java
Python 3
C#
Javascript
// C++ implementation to print array of strings in sorted// order without copying one string into another#include <bits/stdc++.h> using namespace std; // function to print strings in sorted ordervoid printInSortedOrder(string arr[], int n){    int index[n];    int i, j, min;         // Initially the index of the strings    // are assigned to the 'index[]'    for (i=0; i<n; i++)        index[i] = i;         // selection sort technique is applied       for (i=0; i<n-1; i++)       {        min = i;        for (j=i+1; j<n; j++)        {            // with the help of 'index[]'            // strings are being compared            if (arr[index[min]].compare(arr[index[j]]) > 0)                min = j;        }                 // index of the smallest string is placed        // at the ith index of 'index[]'        if (min != i)        {            int temp = index[min];            index[min] = index[i];            index[i] = temp;        }    }         // printing strings in sorted order    for (i=0; i<n; i++)        cout << arr[index[i]] << " ";} // Driver program to test aboveint main(){    string arr[] = {"geeks", "quiz", "geeks", "for"};    int n = 4;    printInSortedOrder(arr, n);    return 0;}
//Java implementation to print array of strings in sorted// order without copying one string into another class GFG {     // function to print strings in sorted order    static void printInSortedOrder(String arr[], int n) {        int index[] = new int[n];        int i, j, min;         // Initially the index of the strings        // are assigned to the 'index[]'        for (i = 0; i < n; i++) {            index[i] = i;        }         // selection sort technique is applied           for (i = 0; i < n - 1; i++) {            min = i;            for (j = i + 1; j < n; j++) {                // with the help of 'index[]'                // strings are being compared                if (arr[index[min]].compareTo(arr[index[j]]) > 0) {                    min = j;                }            }             // index of the smallest string is placed            // at the ith index of 'index[]'            if (min != i) {                int temp = index[min];                index[min] = index[i];                index[i] = temp;            }        }         // printing strings in sorted order        for (i = 0; i < n; i++) {            System.out.print(arr[index[i]] + " ");        }    }     // Driver program to test above    static public void main(String[] args) {        String arr[] = {"geeks", "quiz", "geeks", "for"};        int n = 4;        printInSortedOrder(arr, n);    }} // This code is contributed by 29AjayKumar
# Python 3 implementation to print array# of strings in sorted order without# copying one string into another # function to print strings in sorted orderdef printInSortedOrder(arr, n):    index = [0] * n         # Initially the index of the strings    # are assigned to the 'index[]'    for i in range(n):        index[i] = i         # selection sort technique is applied    for i in range(n - 1):        min = i        for j in range(i + 1, n):                         # with the help of 'index[]'            # strings are being compared            if (arr[index[min]] > arr[index[j]]):                min = j                 # index of the smallest string is placed        # at the ith index of 'index[]'        if (min != i):            index[min], index[i] = index[i], index[min]         # printing strings in sorted order    for i in range(n):        print(arr[index[i]], end = " ") # Driver Codeif __name__ == "__main__":         arr = ["geeks", "quiz", "geeks", "for"]    n = 4    printInSortedOrder(arr, n) # This code is contributed by ita_c
     //C# implementation to print an array of strings in sorted// order without copying one string into another using System;public class GFG {      // function to print strings in sorted order    static void printInSortedOrder(String []arr, int n) {        int []index = new int[n];        int i, j, min;          // Initially the index of the strings        // are assigned to the 'index[]'        for (i = 0; i < n; i++) {            index[i] = i;        }          // selection sort technique is applied           for (i = 0; i < n - 1; i++) {            min = i;            for (j = i + 1; j < n; j++) {                // with the help of 'index[]'                // strings are being compared                if (arr[index[min]].CompareTo(arr[index[j]]) > 0) {                    min = j;                }            }              // index of the smallest string is placed            // at the ith index of 'index[]'            if (min != i) {                int temp = index[min];                index[min] = index[i];                index[i] = temp;            }        }          // printing strings in sorted order        for (i = 0; i < n; i++) {            Console.Write(arr[index[i]] + " ");        }    }      // Driver program to test above    static public void Main() {        String []arr = {"geeks", "quiz", "geeks", "for"};        int n = 4;        printInSortedOrder(arr, n);    }}  // This code is contributed by 29AjayKumar
<script>//Javascript implementation to print array of strings in sorted// order without copying one string into another         // function to print strings in sorted order    function printInSortedOrder(arr,n)    {        let index = new Array(n);        let i, j, min;           // Initially the index of the strings        // are assigned to the 'index[]'        for (i = 0; i < n; i++) {            index[i] = i;        }           // selection sort technique is applied           for (i = 0; i < n - 1; i++) {            min = i;            for (j = i + 1; j < n; j++) {                // with the help of 'index[]'                // strings are being compared                if (arr[index[min]]>(arr[index[j]]) ) {                    min = j;                }            }               // index of the smallest string is placed            // at the ith index of 'index[]'            if (min != i) {                let temp = index[min];                index[min] = index[i];                index[i] = temp;            }        }           // printing strings in sorted order        for (i = 0; i < n; i++) {            document.write(arr[index[i]] + " ");        }    }         // Driver program to test above    let arr=["geeks", "quiz", "geeks", "for"];    let n = 4;    printInSortedOrder(arr, n);         // This code is contributed by avanitrachhadiya2155</script>
Output:  
for geeks geeks quiz
Time Complexity: O(n2)The approach can have its usage when we have to minimize the number of disc writes as in the case of an array of structures. The structure values are compared, but their values are not being swapped, instead, their index is maintained in another array, which is manipulated to keep the indexes in an order which represents the sorted array of structures. 
29AjayKumar
ukasp
Akanksha_Rai
avanitrachhadiya2155
Sorting
Strings
Strings
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
std::sort() in C++ STL
Time Complexities of all Sorting Algorithms
Radix Sort
Merge two sorted arrays
Chocolate Distribution Problem
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Longest Common Subsequence | DP-4