Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Sort file names in lexicographical order of their extensions

  • Last Updated : 17 Feb, 2021

Given an array of strings Files[], representing name of some files, the task is to sort the array based on the lexicographical order of the extensions of the file names. If more than one files have the same extension, then sort them in lexicographically.

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: files[] = {“ajay.cpp”, “pchy.pdf”, “loki.docx”, “raju.zip” } 
Output: ajay.cpp, loki.docx, pchy.pdf, raju.zip 
Explanation: 
Lexicographically sorted order of “cpp” < “docx” < “pdf” < “zip”



Input: files[] = {“abc.cpp”, “bcd.cpp”, “ab.cpp”, “efg.zip”} 
Output: ab.cpp, abc.cpp, bcd.cpp, efg.zip 
Explanation: 
Since the file names { “abc.cpp”, “bcd.cpp”, “ab.cpp” } have same extension, they are sorted lexicographical order of their names. 
 

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ Program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Comparator function to sort an array of strings
// based on the extension of their file names
bool custom(string s1, string s2)
{
 
    // Stores index of '.' in s1
    size_t i = s1.find('.');
 
    // Stores index of '.' in s2
    size_t j = s2.find('.');
 
    // Stores name of extension of s2
    string d = s1.substr(i + 1);
 
    // Stores name of extension of s2
    string e = s2.substr(j + 1);
 
    // If both files have the
    // same extension name
    if (d == e) {
 
        // Return lexicographically
        // smaller of the two strings
        return s1 < s2;
    }
 
    return d < e;
}
 
// Function to sort the files names
// based on the name of their extension
void sortfromextension(vector<string>& files)
{
 
    // Sort file names in lexicographical
    // order of their extensions
    sort(files.begin(), files.end(), custom);
 
    // Print files in sorted form
    // based on extension names
    for (auto s : files) {
        cout << s << ", ";
    }
}
 
// Driver Code
int main()
{
    vector<string> files
        = { "ajay.cpp", "pchy.pdf",
            "loki.docx", "raju.zip" };
 
    sortfromextension(files);
    return 0;
}

Java




// Java program for above approach
import java.util.*;
import java.lang.*;
class GFG
{
 
  // Function to sort the files names
  // based on the name of their extension
  static void sortfromextension(String[] files)
  {
 
    // Sort file names in lexicographical
    // order of their extensions
    Arrays.sort(files, new Comparator<String>(){
 
      public int compare(String s1,String s2){
 
        // Stores index of '.' in s1
        int i = s1.indexOf('.');
 
        // Stores index of '.' in s2
        int j = s2.indexOf('.');
 
        // Stores name of extension of s2
        String d = s1.substring(i + 1);
 
        // Stores name of extension of s2
        String e = s2.substring(j + 1);  
        return (d.equals(e))?(s1.compareTo(s2)<0?-1:1):(d.compareTo(e)<0?-1:1);
      }
 
    });
 
    // Print files in sorted form
    // based on extension names
    for (int i = 0; i < files.length - 1; i++)
    {
      System.out.print(files[i] + ", ");
    }
    System.out.print(files[files.length - 1]);
  }
  // Driver function
  public static void main (String[] args)
  {
    String[] files
      = { "ajay.cpp", "pchy.pdf",
         "loki.docx", "raju.zip" };
 
    sortfromextension(files);
  }
}
 
// This code is contributed by offbeat
Output
ajay.cpp, loki.docx, pchy.pdf, raju.zip, 

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




My Personal Notes arrow_drop_up
Recommended Articles
Page :