Przykłady plasterków sortowania Golanga

Przyklady Plasterkow Sortowania Golanga



Sortowanie to podstawowa operacja programistyczna, która obejmuje układanie elementów w określonej kolejności. Pakiet sortowania, w którym dostępna jest oficjalna biblioteka Go, zawiera kilka funkcji umożliwiających szybkie sortowanie wycinków. Sortowanie wycinków jest częstym zadaniem w wielu aplikacjach, od organizowania danych do prezentacji po optymalizację algorytmów wyszukiwania. W tym artykule omówiono różne techniki sortowania i pokazano ich użycie w Go przy użyciu pakietu sort.

Przykład 1: Wycinek sortowania Golanga w porządku rosnącym

Funkcja „sort.Slice()” jest najważniejszą funkcją w Go, która zmienia kolejność elementów wycinka w porządku rosnącym lub malejącym. Weź pod uwagę poniższą ilustrację, na której wycinek jest ułożony w porządku rosnącym:

pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
równySlice := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Drukuj ln ( „Nieposortowany wycinek:” , równySlice )
sortować . Plasterek ( równySlice , funkcja ( I , J int ) bool {
powrót równySlice [ I ] < parzystySlice [ J ]
})
fmt . Drukuj ln ( „Posortowany wycinek:” , równySlice )
}

Na początku funkcji main() definiujemy wycinek evenSlice z wartościami {10, 2, 8, 4, 0, 6}. Ten wycinek reprezentuje zbiór liczb parzystych, które początkowo są nieposortowane. Aby posortować wycinek evenSlice, używana jest funkcja sort.Slice() z plasterkiem. Wewnątrz funkcji sort.Slice() funkcja sortująca jest podawana jako argument. Ta funkcja określa kolejność sortowania, porównując dwa elementy wycinka o indeksach „i” i „j”. Jeśli evenSlice[i] jest mniejsze niż evenSlice[j], zwraca true; w przeciwnym razie zwraca wartość false. Funkcja sort.Slice() wykorzystuje tę funkcję porównania do zmiany kolejności elementów wycinka „evenSlice” w porządku rosnącym.







Wyniki posortowanego wycinka w porządku rosnącym są generowane na następującym ekranie wyjściowym:





Przykład 2: Wycinek części sortowania według Golanga

Następnie sortowanie jest stosowane do podwycinka określonego wycinka w porządku rosnącym za pomocą funkcji sort.Slice() w Go.





pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
N := [] int { 9 , 7 , 3 , 5 }
początek := 0
koniec := 3
sortować . Plasterek ( N [ początek : koniec ], funkcja ( I , J int ) bool {
powrót N [ początek + I ] < rz [ początek + J ]
})
fmt . Drukuj ln ( N )
}

Na początku tworzymy wycinek „n” z wartościami [9, 7, 3, 5]. Dodatkowo dwie zmienne, „początek” i „koniec”, są ustawione odpowiednio na 0 i 3. Zmienne te określają zakres indeksów w „n” wycinku, który zostanie posortowany. Następnie wywoływana jest funkcja „sort.Slice()” z podwycinkiem „n[początek:koniec]” jako pierwszym argumentem. Ten podwycinek zawiera elementy „n” w określonym zakresie. Następnie funkcja sortująca jest podawana jako drugi argument wewnątrz funkcji sort.Slice().

Tutaj ta funkcja otrzymuje dwa indeksy, „i” i „j”, które reprezentują elementy w pod-wycinku. Aby porównać elementy w pod-wycinku, funkcja sortowania uzyskuje dostęp do odpowiednich elementów w oryginalnym wycinku za pomocą początku offset.Porównuje n[start+i] i n[start+j].Następnie funkcja sort.Slice() wykorzystuje udostępnioną funkcję sortowania do zmiany kolejności elementów w wycinku podrzędnym w porządku rosnącym.



Poniższe dane wyjściowe pokazują, że elementy w określonym zakresie (od początku do końca-1) są sortowane, a elementy poza zakresem pozostają niezmienione:

Przykład 3: Wycinek sortowania liczb całkowitych Golanga przy użyciu funkcji Sort.Ints().

Ponadto najwygodniejszym sposobem sortowania wycinków liczb całkowitych jest funkcja sort.Ints() bez konieczności implementowania własnych metod sortowania. Działa bezpośrednio na wycinkach liczb całkowitych i wykonuje sortowanie w miejscu. Poniższy program sortuje podane liczby całkowite:

pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
IntSlice := [] int { 10 , 13 , piętnaście , jedenaście , 14 , 12 }
fmt . Drukuj ln ( „Nieposortowany wycinek:” , IntSlice )
sortować . Int ( IntSlice )
fmt . Drukuj ln ( „Posortowany wycinek:” , IntSlice )
}

Najpierw deklarujemy i inicjujemy wycinek „IntSlice” z wartościami [10, 13, 15, 11, 14, 12], które reprezentują zbiór liczb całkowitych, które początkowo są nieposortowane. Następnie wywoływana jest funkcja sort.Ints() z wycinkiem „IntSlice” jako argumentem w celu posortowania „IntSlice”. W tym przypadku funkcja sort.Ints() sortuje wewnętrznie każdą część wycinka zgodnie ze zoptymalizowanym algorytmem sortowania. Modyfikuje bezpośrednio oryginalny wycinek, zmieniając kolejność jego elementów w posortowanej kolejności.

Poniższy wynik pokazuje najpierw, że nieposortowany wycinek jest wyświetlany jako pierwszy, a następnie posortowany wycinek:

Przykład 4: Wycinek łańcucha sortowania według Golanga

Go oferuje również funkcję sort.Strings() pakietu sort, która służy do sortowania wycinka ciągów znaków w określonej kolejności. W tym przypadku następujący program pomaga posortować wycinek łańcuchów:

pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
strSl := [] strunowy { 'golan' , 'pyton' , 'Jawa' , 'perl' , 'maszynopis' }
sortować . Smyczki ( strSl )
fmt . Drukuj ln ( strSl )
}

Najpierw ustaliliśmy wycinek „strSl” z wartościami [„golang”, „python”, „java”, „perl”, „typescript”], które nie są sortowane. Następnie sortujemy wycinek „strSl” za pomocą funkcji sort.Strings(), która sortuje elementy wycinka w porządku leksykograficznym. Ta funkcja bezpośrednio modyfikuje oryginalny wycinek, zmieniając kolejność jego elementów w posortowanej kolejności na podstawie ich wartości ASCII.

Dane wyjściowe sortują wycinek łańcucha w sposób rosnący, jak pokazano w następujący sposób:

Przykład 5: Wycinek sortowania Golang Check przy użyciu funkcji IntAreSort().

Jednak za pomocą funkcji sort.IntsAreSorted() Go możemy sprawdzić, czy dany wycinek liczb całkowitych jest posortowany rosnąco, czy nie. Rozważmy następujący przykładowy program funkcji IntAreSort() dla danego wycinka:

pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
śl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Drukuj ln ( „Plasterki:” )
fmt . Drukuj ln ( „Nieposortowany kawałek:” , śl )
wynik := sortować . IntsAre Sorted ( śl )
fmt . Drukuj ln ( ' \N Wynik:' )
fmt . Drukuj ln ( „Czy dany plasterek jest posortowany?:” , wynik )
}

Po pierwsze, nieposortowany wycinek losowych liczb całkowitych jest definiowany jako „sl”. Ten wycinek zawiera zbiór liczb całkowitych w przypadkowej kolejności. Następnie wywołujemy funkcję sort.IntsAreSorted() i przekazujemy wycinek „sl” jako argument. Ta funkcja zapewnia wynik logiczny, który wskazuje, czy dane wejściowe wycinka są ułożone w kolejności rosnącej. Następnie funkcja fmt.Println() drukuje wyniki, które określają, czy dany wycinek jest posortowany, czy nie, na podstawie zwróconej wartości logicznej.

Dane wyjściowe wyświetlają wartość false dla kolejności sortowania wycinka liczb całkowitych, ponieważ jest on nieposortowany:

Przykład 6: Wycinek sortowania wstecznego Golanga

Co więcej, używając funkcji sortReverse() i sortStringSlice() z pakietu sort w Go, możemy odwrócić sortowanie fragmentu łańcuchów. Poniższy program demonstruje działanie funkcji sort.Reverse():

pakiet główny
import (
'fmt'
'sortować'
)
funkcja główny () {
samogłoskaSlice := [] strunowy { 'To jest' , 'A' , 'I' , 'W' , 'O' }
fmt . Drukuj ln ( „Przed sortowaniem:” , samogłoskaSlice )
sortować . Sortować ( sortować . Odwracać ( sortować . StringSlice ( samogłoskaSlice )))
fmt . Drukuj ln ( „Po posortowaniu:” , samogłoskaSlice )
}

Zaczynamy od zdefiniowania fragmentu łańcucha „vowelSlice”, który zawiera samogłoski „e”, „a”, „i”, „u” i „o”. Początkowa zawartość określonego wycinka napisów jest drukowana najpierw za pomocą funkcji „print”. Następnie wykonywana jest operacja sortowania przy użyciu funkcji sort.Sort() z funkcjami sort.Reverse() i sort.StringSlice() jako argumentami. Tutaj „sort.Reverse()” tworzy nowy typ, który odwraca kolejność elementów. Przyjmuje typ „sort.StringSlice” jako argument, który konwertuje vowelSlice na typ sortowalny.

Dane wyjściowe tutaj wyświetlają samogłoski w odwrotnej kolejności alfabetycznej:

Wniosek

Zagłębiliśmy się w różne funkcje sortowania z przykładami, które sortują dostarczony wycinek. Omówiliśmy również sortowanie wycinków podrzędnych i sprawdzanie, czy wycinek jest już posortowany. W związku z tym możemy wykorzystać możliwości pakietu sort, aby sprostać szerokiej gamie wyzwań związanych z sortowaniem w ich projektach Go.