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

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: It has the following steps:

1. Maintain another array indexed_arr which stores/maintains the index of each string.
2. 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].compare(str[index] > 0
temp = index
index = index
index = 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++

 `// C++ implementation to print array of strings in sorted ` `// order without copying one string into another ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// function to print strings in sorted order ` `void` `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 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

## Java

 `//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

 `# Python 3 implementation to print array  ` `# of strings in sorted order without  ` `# copying one string into another ` ` `  `# function to print strings in sorted order ` `def` `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 Code ` `if` `__name__ ``=``=` `"__main__"``: ` `     `  `    ``arr ``=` `[``"geeks"``, ``"quiz"``, ``"geeks"``, ``"for"``] ` `    ``n ``=` `4` `    ``printInSortedOrder(arr, n) ` ` `  `# This code is contributed by ita_c `

## 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 `

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 so as to keep the indexes in an order which represents the sorted array of structures.

Exercise: Apply this approach with the help of other sorting techniques like merge sort, insertion sort, etc.

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.