Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmSort file names in lexicographical order of their extensions

Sort file names in lexicographical order of their extensions

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:

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


C#




using System;
using System.Linq;
 
class Program
{
    // 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
        Array.Sort(files, (s1, 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 == e) ? string.Compare(s1, s2, StringComparison.Ordinal) : string.Compare(d, e, StringComparison.Ordinal);
        });
 
        // Print files in sorted form
        // based on extension names
        Console.WriteLine(string.Join(", ", files));
    }
 
    static void Main(string[] args)
    {
        string[] files =
        {
            "ajay.cpp", "pchy.pdf",
            "loki.docx", "raju.zip"
        };
 
        SortFromExtension(files);
    }
}


Python3




# Python
import re
 
def SortFromExtension(files):
    # Sort file names in lexicographical
    # order of their extensions
    files.sort(key=lambda s: re.split("\.([^.]+)", s)[1])
 
    # Print files in sorted form
    # based on extension names
    print(", ".join(files))
 
if __name__ == "__main__":
    files = ["ajay.cpp", "pchy.pdf", "loki.docx", "raju.zip"]
    SortFromExtension(files)
#contributed by akashish__


Javascript




// Javascript program for the above approach
 
function SortFromExtension(files) {
    // Sort file names in lexicographical
    // order of their extensions
    files.sort(function(a, b) {
    let ext1 = a.split('.').pop();
    let ext2 = b.split('.').pop();
    if (ext1 < ext2) {
        return -1;
    } else if (ext1 > ext2) {
        return 1;
    } else {
        return a.localeCompare(b);
    }
});
 
    // Print files in sorted form
    // based on extension names
    console.log(files.join(', '));
}
 
let files = ["ajay.cpp", "pchy.pdf", "loki.docx", "raju.zip"];
SortFromExtension(files);
 
 
// This code is contributed by rishabmalhdjio


Output

ajay.cpp, loki.docx, pchy.pdf, raju.zip, 

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

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Nokonwaba Nkukhwana
Experience as a skilled Java developer and proven expertise in using tools and technical developments to drive improvements throughout a entire software development life cycle. I have extensive industry and full life cycle experience in a java based environment, along with exceptional analytical, design and problem solving capabilities combined with excellent communication skills and ability to work alongside teams to define and refine new functionality. Currently working in springboot projects(microservices). Considering the fact that change is good, I am always keen to new challenges and growth to sharpen my skills.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments