Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Sort vector of Numeric Strings in ascending order

  • Difficulty Level : Medium
  • Last Updated : 18 Oct, 2021

Given a vector of numeric strings arr[], the task is to sort the given vector of numeric strings in ascending order.

Examples:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: arr[] = {“120000”, “2”, “33”}
Output: {“2”, “33”, “120000”}



Input: arr[] = {“120”, “2”, “3”}
Output: {“2”, “3”, “120”}

Approach: The sort() function in C++  STL is able to sort vector of strings if and only if it contains single numeric character for example, { ‘1’, ‘ ‘}  but to sort numeric vector of string with multiple character for example, {’12’, ’56’, ’14’ } one should write own comparator inside sort() function. The comparator function to sort in ascending order logic goes as:

Let’s build a comparator function considering the two cases given below:

  • Case 1: If the length of the string is not the same then place a smaller length string in first place for example, {’12’, ‘2’}  place ‘2’ before ’12’ as ‘2’ is smaller than ’12’.
  • Case 2: If length is the same then place the string which is numerically smaller for example, ‘1’, ‘2’ place ‘1’ before ‘2’.

Below is the C++ program to implement the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Comparator Function
bool myCmp(string s1, string s2)
{
 
    // If size of numeric strings
    // are same the put lowest value
    // first
    if (s1.size() == s2.size()) {
        return s1 < s2;
    }
 
    // If size is not same put the
    // numeric string with less
    // number of digits first
    else {
        return s1.size() < s2.size();
    }
}
 
// Driver Code
int main()
{
    vector<string> v
        = { "12", "2", "10", "6", "4", "99", "12" };
 
    // Calling sort function with
    // custom comparator
    sort(v.begin(), v.end(), myCmp);
 
    // Print the vector values after
    // sorting
    for (auto it : v) {
        cout << it << " ";
    }
 
    cout << "\n";
}

Java




// Java program for the above approach
import java.util.*;
class GFG{
 
// Comparator Function
static List<String> sort(List<String> list)
{
    Comparator<String> cmp = (o1, o2) -> {
        // If size of numeric Strings
        // are same the put lowest value
        // first
        if (o1.length() == o2.length()) {
            return Integer.valueOf(o1)-Integer.valueOf(o2);
        }
       
        // If size is not same put the
        // numeric String with less
        // number of digits first
        else {
            return o1.length()-o2.length();
        }
    };
    Collections.sort(list, cmp);
    return list;
}
 
// Driver Code
public static void main(String[] args)
{
    List<String> v
        = Arrays.asList( "12", "2", "10", "6", "4", "99", "12" );
 
    // Calling sort function with
    // custom comparator
    v = sort(v);
 
    // Print the vector values after
    // sorting
    for (String it : v) {
        System.out.print(it+ " ");
    }
 
}
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
        // JavaScript Program to implement
        // the above approach
 
        // Comparator Function
        function myCmp(s1, s2) {
 
            // If size of numeric strings
            // are same the put lowest value
            // first
            if (s1.length == s2.length) {
                return parseInt(s1) - parseInt(s2);
            }
 
            // If size is not same put the
            // numeric string with less
            // number of digits first
            else {
                return s1.length - s2.length;
            }
        }
 
        // Driver Code
 
        let v
            = ["12", "2", "10", "6", "4", "99", "12"];
 
        // Calling sort function with
        // custom comparator
        v.sort(myCmp)
 
        // Print the vector values after
        // sorting
        for (let i = 0; i < v.length; i++) {
            document.write(v[i] + " ")
        }
 
// This code is contributed by Potta Lokesh
    </script>

 
 

Output: 
2 4 6 10 12 12 99

 

 

Time Complexity: O(N*log N)
Auxiliary Space: O(1)

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :