logo

Sortuj ciąg w Javie (2 różne sposoby)

Klasa string nie ma żadnej metody bezpośrednio sortującej ciąg, ale możemy posortować ciąg, stosując po kolei inne metody. Ciąg znaków to ciąg znaków. W Javie obiekty String są niezmienne, co oznacza stałą i nie można ich zmienić po utworzeniu.

Tworzenie ciągu



Istnieją dwa sposoby tworzenia ciągu w Javie:

  • Dosłowny ciąg
String s = techcodeview.com;>
  • Za pomocą nowy słowo kluczowe
String s = new String (techcodeview.com);>

Notatka: Jak wiemy, że String jest niezmienny w Javie, stąd w trzecim kroku musimy utworzyć nowy ciąg.

Metody:



Istnieją dwie metody, dzięki którym możemy posortować dowolny ciąg znaków w Javie alfabetycznie

bfs i dfs
  1. Bez użycia metody sort().
  2. Korzystając z metoda sortowania().

Ilustracja:

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

Omówmy teraz metody i zaimplementujmy je.



Metoda 1: Bez użycia metody sort().

Tutaj przedstawimy podejście do sortowania ciągu bez użycia żadnej predefiniowanej logiki. Dlatego też staje się to ważnym podejściem z punktu widzenia wnikliwego wywiadu.

Krotka sortowania w Pythonie

Procedura:

  1. Konwertuj ciąg znaków na tablicę za pomocą metody toCharArray() klasy String
  2. Teraz użyj zagnieżdżonych pętli, aby sprawdzić zamianę elementów tablicy.
  3. Wydrukuj te elementy tablicy znaków.

Przykład

Jawa
// 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 */>

Wyjście:

eeeefggkkorss>

Złożoność czasu : O(n * log n). (gdzie „n” to rozmiar ciągu wejściowego.)


Metoda 2: Przez używając metoda sortowania().

2A Korzystając z metoda sort()- sortowanie naturalne

Procedura:

  1. Główną logiką jest toCharArray() metoda klasy String nad ciągiem wejściowym, aby utworzyć tablicę znaków dla ciągu wejściowego.
  2. Teraz użyj Tablice.sort(znak c[]) metoda sortowania tablicy znaków.
  3. Użyj konstruktora klasy String, aby utworzyć posortowany ciąg znaków z tablicy znaków.

Przykład 1

Jawa
// 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);  } }>

Wyjście
Input String : geeksforgeeks Output String : eeeefggkkorss>

2B By używając metoda sort()- Sortowanie niestandardowe

Tablice.sort(znak c[]) metoda sortowania znaków na podstawie ich wartości ASCII, możemy zdefiniować naszą własną Komparator aby posortować ciąg.

nazwa miasta w USA

Ilustracja:

Input String : techcodeview.com Output String : eeeefGGkkorss>

Procedura:

  1. Konwertuj ciąg wejściowy na Postać szyk. Nie ma na to bezpośredniej metody. Do wypełnienia tablicy użyjemy pętli for.
  2. Używać Arrays.sort(T [ ], Komparator c) metoda sortowania tablicy znaków. W tym celu musimy wdrożyć porównywać() metoda oparta na naszym niestandardowym zachowaniu sortowania.
  3. Teraz możemy użyć StringBuilder do konwersji tablicy Character na String.

Przykład 2

Jawa
// 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 // Aby porównać znaki @Override public int Compare(Character c1, Character c2) { // Ignorowanie wielkości liter return Character.compare( Character.toLowerCase(c1), Character.toLowerCase(c2));  } });  // Użycie StringBuilder do konwersji tablicy znaków na // String StringBuilder sb = new StringBuilder(tempArray.length);  for (Znak c: tempArray) sb.append(c.charValue());  zwróć sb.toString();  } // Metoda 3 // Metoda głównego sterownika public static void main(String[] args) { // Niestandardowy ciąg wejściowy String inputString = 'techcodeview.com';  // Wywołanie metody 1 w celu posortowania ciągu wejściowego // i zapisanie go w ciągu String OutputString = sortString(inputString);  // Wydrukuj i wyświetl ciągi wejściowe i wyjściowe System.out.println('Ciąg wejściowy: ' + ciąg wejściowy);  System.out.println('Ciąg wyjściowy: ' + StringString);  } }>

Wyjście
Input String : techcodeview.com Output String : eeeefGGkkorss>

Notatka:

public int compare(Object o1, Object o2) {}>
  • musisz zwrócić -ve, jeśli o1 musi wystąpić przed o2
  • musisz zwrócić +ve, jeśli o1 ma nastąpić po o2
  • musi zwrócić 0, jeśli o1 jest równe o2