logo

Sortați un șir în Java (2 moduri diferite)

Clasa string nu are nicio metodă care sortează direct un șir, dar putem sorta un șir aplicând alte metode una după alta. Șirul este o secvență de caractere. În java, obiectele String sunt imuabile, ceea ce înseamnă o constantă și nu pot fi modificate odată create.

Crearea unui șir

Există două moduri de a crea un șir în Java:



  • Literal șir
String s = techcodeview.com;>
  • Folosind nou cuvânt cheie
String s = new String (techcodeview.com);>

Notă: După cum știm că String este imuabil în java, prin urmare, în pasul al treilea, trebuie să creăm un șir nou.

Metode:

Există două metode prin care putem sorta orice șir în java alfabetic

alisa manyonok
  1. Fără a folosi metoda sort().
  2. Prin utilizarea metoda sort().

Ilustrare:

Input string : 'geeksforgeeks' Output string : 'eeeefggkkorss'>

Acum haideți să discutăm despre metode și să le implementăm.

Metoda 1: Fără a folosi metoda sort().

Aici vom stabili o abordare pentru sortarea unui șir fără a folosi nicio logică predefinită. Deci, devine, de asemenea, o abordare importantă din perspectiva perceptivă a interviului.

comanda unix top

Procedură:

  1. Convertiți șirul într-o matrice cu ajutorul metodei toCharArray() din clasa String
  2. Acum utilizați bucle imbricate pentru a verifica dacă elementele de schimb ale unei matrice.
  3. Imprimați aceste elemente de matrice de caractere.

Exemplu

Java
// Java program for Sorting a String without using any inbuilt sorting functions import java.io.*; class StringSort {  //The Merge Function, handling the core compare & copy logic  void merge(char arr[], int l, int m, int r)  {    int n1 = m - l + 1;  int n2 = r - m;  char L[] = new char[n1];  char R[] = new char[n2]; //Logic for backing up to temp arrays  for (int i = 0; i < n1; ++i)  L[i] = arr[l + i];  for (int j = 0; j < n2; ++j)  R[j] = arr[m + 1 + j];  int i = 0, j = 0;  int k = l;  //Logic to compare and copy. The core Merge Logic of the Merge sort.  while (i < n1 && j < n2) {  if (L[i] <= R[j]) {  arr[k] = L[i];  i++;  }  else {  arr[k] = R[j];  j++;  }  k++;  }  //Logic to copy remaining elements of L[]  while (i < n1) {  arr[k] = L[i];  i++;  k++;  }  //Logic to copy remaining elements of R[]  while (j < n2) {  arr[k] = R[j];  j++;  k++;  }  }  //The main Merge Sort function from where the sorting begins  void mergeSort(char arr[], int l, int r)  {  if (l < r) {  // Find the middle point  int m = l + (r - l) / 2;    // Sort first and second halves  mergeSort(arr, l, m);  mergeSort(arr, m + 1, r);    // Merge the sorted halves  merge(arr, l, m, r);  }  }  // A utility function to print char array of size n  static void printArray(char arr[])  {  int n = arr.length;  for (int i = 0; i < n; ++i)  System.out.print(arr[i] + ' ');  System.out.println();  }  // Driver code  public static void main(String args[])  {  String inputString = 'geeksforgeeks';  char arr[] = inputString.toCharArray();  System.out.println('Given array is');  printArray(arr);  StringSort ob = new StringSort();  ob.mergeSort(arr, 0, arr.length - 1);  System.out.println('
Sorted array is');  printArray(arr);  } } /* This code is contributed by Nikhil B */>

Ieșire:

eeeefggkkorss>

Complexitatea timpului : O(n * log n). (unde „n” este dimensiunea șirului de intrare.)


Metoda 2: Prin folosind metoda sort().

2A Prin utilizarea metoda sort() - sortare naturală

Procedură:

  1. Logica principală este să metoda toCharArray(). a clasei String peste șirul de intrare pentru a crea o matrice de caractere pentru șirul de intrare.
  2. Acum folosește Arrays.sort(car c[]) metoda de sortare a matricei de caractere.
  3. Utilizați constructorul clasei String pentru a crea un șir sortat dintr-o matrice char.

Exemplul 1

Java
// Java program to Sort a String Alphabetically // Using toCharArray() method // With using the sort() method // Importing Arrays class from java.util package import java.util.Arrays; // Main class public class GFG {  // Method 1  // To sort a string alphabetically  public static String sortString(String inputString)  {  // Converting input string to character array  char tempArray[] = inputString.toCharArray();  // Sorting temp array using  Arrays.sort(tempArray);  // Returning new sorted string  return new String(tempArray);  }  // Method 2  // Main driver method  public static void main(String[] args)  {  // Custom string as input  String inputString = 'geeksforgeeks';  String outputString = sortString(inputString);  // Print and display commands  // Input string  System.out.println('Input String : ' + inputString);  // Output string  System.out.println('Output String : '  + outputString);  } }>

Ieșire
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B De către folosind metoda sort() - Sortare personalizată

Arrays.sort(car c[]) metoda sortării caracterelor pe baza valorii lor ASCII, putem defini personalitatea noastră Comparator pentru a sorta un șir.

Ilustrare:

liste în java
Input String : techcodeview.com Output String : eeeefGGkkorss>

Procedură:

  1. Convertiți șirul de intrare în Caracter matrice. Nu există o metodă directă de a face acest lucru. Vom folosi bucla for pentru a umple matricea.
  2. Utilizare Arrays.sort(T [ ], Comparator c) metoda de sortare a matricei de caractere. Pentru aceasta, trebuie să implementăm comparaţie() metoda bazată pe comportamentul nostru personalizat de sortare.
  3. Acum putem folosi StringBuilder pentru a converti matricea Character în String.

Exemplul 2

Java
// Java Program to Sort a Mixed String Containing // Uppercase and Lowercase Characters // Importing required classes import java.util.Arrays; import java.util.Comparator; // Main class class GFG {  // Method 1  // To sort a mixed string  public static String sortString(String inputString)  {  // Converting input string to Character array  Character tempArray[]  = new Character[inputString.length()];  for (int i = 0; i < inputString.length(); i++) {  tempArray[i] = inputString.charAt(i);  }  // Sort, ignoring case during sorting  Arrays.sort(tempArray, new Comparator() { // Metoda 2 // Pentru a compara caracterele @Override public int compare(Caracter c1, Caracter c2) { // Ignorând caracterul returnat Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  } });  // Folosind StringBuilder pentru a converti matricea de caractere în // String StringBuilder sb = new StringBuilder(tempArray.length);  pentru (Caracter c: tempArray) sb.append(c.charValue());  return sb.toString();  } // Metoda 3 // Metoda driverului principal public static void main(String[] args) { // Șir de intrare personalizat String inputString = 'techcodeview.com';  // Apelarea metodei 1 pentru a sorta șirul de intrare // și stocarea într-un șir String outputString = sortString(inputString);  // Imprimă și afișează șirurile de intrare și de ieșire System.out.println('Input String : ' + inputString);  System.out.println('Șir de ieșire: ' + șir de ieșire);  } }>>>  
Ieșire
Input String : techcodeview.com Output String : eeeefGGkkorss>

Notă:

trebuie să se întoarcă -ve dacă o1 trebuie să vină înainte de o2
  • trebuie să returneze +ve dacă o1 trebuie să vină după o2
  • trebuie să returneze 0 dacă o1 este egal cu o2