Open In App

Sort an array of strings according to string lengths

Last Updated : 07 Mar, 2023
Comments
Improve
Suggest changes
25 Likes
Like
Report

We are given an array of strings, we need to sort the array in increasing order of string lengths.
Examples: 

Input : {"GeeksforGeeeks", "I", "from", "am"}
Output : I am from GeeksforGeeks

Input :  {"You", "are", "beautiful", "looking"}
Output : You are looking beautiful

A simple solution is to write our own sort function that compares string lengths to decide which string should come first. Below is the implementation, that uses Insertion Sort to sort the array.  

Algorithm: 

  1. Initialize the string with the input words.
  2. Calculate the string length.
  3. Sort the string array according to the length of words in ascending order With the help of insertion sort. 
  4. Print the sorted array.

Below is the implementation of the above approach:

C++
// C++ program to sort an Array of 
// Strings according to their lengths
#include<iostream>
using namespace std;

// Function to print the sorted array of string
void printArraystring(string,int);

// Function to Sort the array of string
// according to lengths. This function 
// implements Insertion Sort. 
void sort(string s[], int n)
{
    for (int i=1 ;i<n; i++)
    {
        string temp = s[i];

        // Insert s[j] at its correct position
        int j = i - 1;
        while (j >= 0 && temp.length() < s[j].length())
        {
            s[j+1] = s[j];
            j--;
        }
        s[j+1] = temp;
    }
}
 
// Function to print the sorted array of string
void printArraystring(string str[], int n)
{
    for (int i=0; i<n; i++)
        cout << str[i] << " ";
}

// Driver function
int main()
{
    string arr[] = {"GeeksforGeeks", "I", "from", "am"};
    int n = sizeof(arr)/sizeof(arr[0]);
    
    // Function to perform sorting
    sort(arr, n);

    // Calling the function to print result
    printArraystring(arr, n);
    
    return 0;
}
Java Python3 C# JavaScript

Output
I am from GeeksforGeeks 

Time Complexity: O(n*m), where m is the length of the string and n is the size of the input array.
Auxiliary Space: O(1)

A better solution is to use the sort function provided by programming languages like C++, and Java. These functions also allow us to write our own custom comparator. Below is C++ implementation that uses C++ STL Sort function

Algorithm:

  1. Initialize the string with the input words.
  2. Calculate the string length.
  3. Compare the strings and return the smallest one.
  4. Sort the string array with the help of the built-in sort function.
  5. Print the sorted array.

Below is the implementation of the above approach:

CPP
#include <bits/stdc++.h>
using namespace  std;

// Function to check the small string
bool compare(string &s1,string &s2)
{
    return s1.size() < s2.size();
}

// Function to print the sorted array of string
void printArraystring(string str[], int n)
{
    for (int i=0; i<n; i++)
        cout << str[i] << " ";
}

// Driver function
int main()
{
    string arr[] = {"GeeksforGeeks", "I", "from", "am"};
    int n = sizeof(arr)/sizeof(arr[0]);
    
    // Function to perform sorting
    sort(arr, arr+n, compare);

    // Calling the function to print result
    printArraystring(arr, n);
    
    return 0;
}
Java Python3 C# JavaScript

Output
I am from GeeksforGeeks 

Time Complexity: O(nlogn), where n is the size of the array.
Auxiliary Space: O(1)

Method 2: Simplified solution using sort function in python and javascript

  1. Take string as a list.
  2. Use the sort function in python and javascript, providing the key as len, in the python code.

Below is the implementation of the above approach:

C++
// C++ program for the above approach

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

// Function to print the strings in sorted order by their length
void printsorted(vector<string>& arr)
{
    // Sorting the vector based on string length using sort function
    sort(arr.begin(), arr.end(), [](const string& a, const string& b) {
        return a.length() < b.length();
    });

    // Printing the sorted strings
    for (const auto& str : arr) {
        cout << str << " ";
    }
    cout << endl;
}

// Driver code
int main()
{
    vector<string> arr = {"GeeksforGeeks", "I", "from", "am"};

    // Calling the printsorted function
    printsorted(arr);

    return 0;
}

// This code is contributed by Prince    
Java Python3 C# JavaScript

Output
I am from GeeksforGeeks

Time Complexity: O(nlogn)
Auxiliary Space: O(1)


Next Article
Article Tags :
Practice Tags :

Similar Reads