Program Python pro třídění řetězce
Řazení byl vždy docela populární nástroj se spoustou aplikací všude tam, kde se volí jazyk Python. Python ve svém jazyce nabízí funkci řazení pro provedení tohoto úkolu. Ale protože ne všechny kontejnery Pythonu jsou proměnlivé, jako je řetězec, funkce řazení nefunguje, protože se snaží třídit a neměnnost to zastaví. Pojďme diskutovat o konkrétních způsobech, jak lze řetězec třídit.
Příklad
Input: geekforgeeks Output: eeeefggkkors Explaination: The Sorting the characters in ascending order gives us 'eeeefggkkors'.
Program pro třídění řetězce v Pythonu
Níže je uveden seznam metod, kterými se budeme zabývat:
- Pomocí join() a seřazeno()
- Použití nativní metody
- Pomocí funkce třídění s snížit() a lambda
- Použitím Bublinové řazení
- Za použití Sloučit třídění metoda
- Používat slovník
Program pro třídění řetězce pomocí join() a sort()
Kombinace výše uvedených funkcí může potenciálně vyřešit tento konkrétní problém. Tento úkol se provádí ve 2. kroku ve kterém v prvním kroku získáme seřazený seznam znaků a poté spojíme výsledek, abychom dostali výslednici seřazený řetězec.
Python3
test_string> => 'geekforgeeks'> # printing original string> print> (> 'The original string : '> +> str> (test_string))> # using join() + sorted()> # Sorting a string> res> => ''.join(> sorted> (test_string))> > # print result> print> (> 'String after sorting : '> +> str> (res))> |
Výstup
The original string : geekforgeeks String after sorting : eeeefggkkors
Časová náročnost: Časová složitost kódu je O(n log n).
Prostorová složitost: Prostorová složitost daného kódu je O(n).
Seřadit pythonovský řetězec u zpívat nativní metodu
Chcete-li seřadit daný řetězec s uživatelským vstupem pomocí vestavěné metody třídění Pythonu.
Python3
String> => 'geekforgeeks'> print> (> 'Original String: '> , String)> lst> => list> (String)> lst.sort()> print> (> 'Sorted String: '> )> for> i> in> lst:> > print> (i, end> => '')> |
Výstup:
Original String: geekforgeeks Sorted String: eeeefggkkors
Časová náročnost: Časová složitost kódu je O(n log n).
Prostorová složitost: Prostorová složitost daného kódu je O(n).
Seřaďte pythonovský řetězec pomocí reduction() a lambda
Tento konkrétní úkol lze také provést pomocí kombinace výše uvedených funkcí. Zde se připojíme k výslednému seřazenému seznamu znaků pomocí funkce lambda spojené funkcí snížení. Funguje pouze pro Python2
Krajta
test_string> => 'geekforgeeks'> # printing original string> print> (> 'The original string : '> +> str> (test_string))> # using sorted() + reduce() + lambda> res> => reduce> (> lambda> x, y: x> +> y,> sorted> (test_string))> > # print result> print> (> 'String after sorting : '> +> str> (res))> |
Výstup
The original string : geekforgeeks String after sorting : eeeefggkkors
Časová náročnost: Časová složitost kódu je O(n log n).
Prostorová složitost: Prostorová složitost daného kódu je O(n).
Seřadit řetězec v Pythonu pomocí Bubble Sort
Převeďte řetězec na seznam znaků a poté použijte bublinový druh algoritmus pro třídění seznamu se nyní připojí k seřazenému seznamu a vytvoří řetězec.
Python3
def> sort_string(s):> > chars> => list> (s)> > n> => len> (chars)> > for> i> in> range> (n):> > for> j> in> range> (> 0> , n> -> i> -> 1> ):> > if> chars[j]>tanky[j> +> 1> ]:> > chars[j], chars[j> +> 1> ]> => chars[j> +> 1> ], chars[j]> > return> ''.join(chars)> s> => 'geekforgeeks'> print> (> 'Original string:'> , s)> print> (> 'String after sorting:'> , sort_string(s))> |
Výstup
Original string: geekforgeeks String after sorting: eeeefggkkors
Časová složitost : O(n^2), protože používáme algoritmus pro třídění bublin, který má časovou složitost O(n^2).
Pomocný prostor: O(n), protože z původního řetězce vytvoříme nový seznam znaků.
Program pro třídění řetězce pomocí Merge Sort
Tento přístup využívá Sloučit třídění algoritmus pro řazení znaků v řetězci. Nejprve převede řetězec na seznam znaků a poté rekurzivně rozdělí seznam na polovinu, dokud není dosaženo základního případu jednoho prvku. Tyto dvě poloviny jsou poté sloučeny zpět dohromady v seřazeném pořadí pomocí funkce merge(). Seřazený seznam je poté převeden zpět na řetězec.
Python3
# Define a function called 'merge_sort'> def> merge_sort(s):> > if> len> (s) <> => 1> :> > return> s> > # find the middle index of the string 's'> > mid> => len> (s)> /> /> 2> > # split the string into two halves, left and right> > left> => merge_sort(s[:mid])> > right> => merge_sort(s[mid:])> > #Recursively apply the merge_sort function on the left and right halves.> > return> merge(left, right)> > # Merge the left and right halves using the merge function.> def> merge(left, right):> #Initialize an empty list called 'result' and two indices, 'i' and 'j', both set to 0.> > result> => []> > i> => j> => 0> > while> i <> len> (left)> and> j <> len> (right):> > if> left[i] result.append(left[i]) #Increment the index of the array i += 1 else: result.append(right[j]) #Increment the index of the array j += 1 result += left[i:] result += right[j:] return result s = 'geekforgeeks' #Convert the sorted list to a string and print the result. sorted_s = ''.join(merge_sort(list(s))) print('String after sorting:', sorted_s)> |
Výstup
String after sorting: eeeefggkkors
Časová náročnost: O(n log n) kde n je délka vstupního řetězce s.
Vesmírná složitost: O(n) kde n je délka vstupního řetězce s.
Seřadit řetězec v programu Python pomocí slovníku
Tento program třídí daný vstupní řetězec ve vzestupném pořadí na základě znaků v něm přítomných. Pomocí slovníku spočítá frekvenci každého znaku a poté je seřadí na základě hodnoty ASCII znaku.
Python3
input_string> => 'geekforgeeks'> #Initialize an empty dictionary to store the count> char_count> => {}> #Loop through each character in the input string and update the count of that character> for> char> in> input_string:> > if> char> in> char_count:> > char_count[char]> +> => 1> > else> :> > char_count[char]> => 1> > #Create an empty string to store the sorted string.> sorted_string> => ''> #Loop through each character in the sorted list of keys of the dictionary> #Add that character multiplied by its count in the input string to the sorted string.> for> char> in> sorted> (char_count.keys()):> > sorted_string> +> => char> *> char_count[char]> #Print the original string and the sorted string.> print> (> 'Original string: {}'> .> format> (input_string))> print> (> 'String after sorting: {}'> .> format> (sorted_string))> |
Výstup
Original string: geekforgeeks String after sorting: eeeefggkkors
Časová náročnost: Časová složitost tohoto algoritmu je O(nlogn) kvůli použití funkce sorted().
Prostorová složitost: Prostorová složitost tohoto algoritmu je O(n) kvůli použití slovníku k uložení počtu každého znaku.