Sort vector of Numeric Strings in ascending order - GeeksforGeeks

21 Mar, 2022
Given a vector of numeric strings arr[], the task is to sort the given vector of numeric strings in ascending order.
Examples:
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++
Java
Python3
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; // Comparator Functionbool 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 Codeint 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 program for the above approachimport java.util.*;class GFG{ // Comparator Functionstatic 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 Codepublic 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
# Python3 Program to implement# the above approach # Comparator Functionfrom functools import cmp_to_key def myCmp(s1, s2):     # If size of numeric strings    # are same the put lowest value    # first    if (len(s1) == len(s2)):        return int(s1) - int(s2)     # If size is not same put the    # numeric string with less   # number of digits first    else:        return len(s1) - len(s2) # Driver Codev = ["12", "2", "10", "6", "4", "99", "12"] # Calling sort function with# custom comparatorv.sort(key = cmp_to_key(myCmp)) # Print the vector values after# sortingfor i in range(len(v)) :    print(v[i],end=" ") # This code is contributed by shinjanpatra
<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>
  
2 4 6 10 12 12 99
 
 
Time Complexity: O(N*log N)Auxiliary Space: O(1)
 
lokeshpotta20
29AjayKumar
shinjanpatra
Arrays
Sorting
Strings
Arrays
Strings
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Window Sliding Technique
Program to find sum of elements in a given array
Reversal algorithm for array rotation
Trapping Rain Water
Move all negative numbers to beginning and positive to end with constant extra space