Примери сортирања Голанга

Primeri Sortirana Golanga



Сортирање је основна програмска операција која укључује стављање елемената у одређени редослед. Пакет за сортирање, у коме је Го-ова званична библиотека доступна, укључује неколико функција за брзо сортирање исечака. Сортирање исечака је уобичајен задатак у многим апликацијама, од организовања података за презентацију до оптимизације алгоритама претраге. Овај чланак истражује различите технике сортирања и демонстрира њихову употребу у Го користећи пакет за сортирање.

Пример 1: Голанг Сортирај исечак у растућем редоследу

Функција „сорт.Слице()“ је најважнија функција у Го која преуређује елементе пресека у растућем или опадајућем редоследу. Узмите у обзир следећу илустрацију где је исечак распоређен у растућем редоследу:

пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
евенСлице := [] инт { 10 , 2 , 8 , 4 , 0 , 6 }
фмт . Принтлн ( „Несортирани комад:“ , евенСлице )
врста . Слице ( евенСлице , фунц ( и , ј инт ) боол {
повратак евенСлице [ и ] < евенСлице [ ј ]
})
фмт . Принтлн ( „Сортирани комад:“ , евенСлице )
}

На почетку функције маин() дефинишемо исечак евенСлице са вредностима {10, 2, 8, 4, 0, 6}. Овај исечак представља колекцију парних бројева који у почетку нису сортирани. Да бисте сортирали исечак евенСлице, функција сорт.Слице() се користи са резом. Унутар функције сорт.Слице() као аргумент је дата функција сортирања. Ова функција одређује редослед сортирања упоређивањем два елемента пресека са индексима „и” и „ј”. Ако је евенСлице[и] мањи од евенСлице[ј], враћа труе; у супротном, враћа фалсе. Функција сорт.Слице() користи ову функцију поређења да преуреди елементе пресека „евенСлице“ у растућем редоследу.







Резултати сортираног пресека у растућем редоследу се генеришу на следећем излазном екрану:





Пример 2: Голанг Сорт Парт Слице

Затим, сортирање се примењује на под-срез наведеног пресека у растућем редоследу помоћу функције сорт.Слице() у Го.





пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
н := [] инт { 9 , 7 , 3 , 5 }
почетак := 0
крај := 3
врста . Слице ( н [ почетак : крај ], фунц ( и , ј инт ) боол {
повратак н [ почетак + и ] < н [ почетак + ј ]
})
фмт . Принтлн ( н )
}

У почетку, креирамо „н“ исечак са вредностима [9, 7, 3, 5]. Поред тога, две променљиве, „почетак“ и „крај“, су постављене на 0 и 3, респективно. Ове варијабле дефинишу опсег индекса у „н” пресеку који ће бити сортиран. Функција „сорт.Слице()“ се затим позива са подсрезом „н[старт:енд]“ као првим аргументом. Овај подслој садржи елементе „н“ унутар наведеног опсега. Након тога, функција сортирања је дата као други аргумент унутар функције сорт.Слице().

Овде та функција прима два индекса, „и“ и „ј“, који представљају елементе унутар подслоја. Да би упоредила елементе унутар подслоја, функција сортирања приступа одговарајућим елементима у оригиналном пресеку користећи почетак оффсет. Она упоређује н[старт+и] и н[старт+ј]. Затим, функција сорт.Слице() користи обезбеђену функцију сортирања да преуреди елементе унутар подслоја у растућем редоследу.



Следећи излаз приказује да су елементи унутар наведеног опсега (почетак до крај-1) сортирани, а елементи изван опсега остају непромењени:

Пример 3: Голанг Сортирање целобројног пресека помоћу функције Сорт.Интс().

Штавише, најпогодније за сортирање делова целих бројева је функција сорт.Интс() без потребе за имплементацијом прилагођених метода сортирања. Делује директно на целобројне пресеке и врши сортирање на месту. Следећи програм сортира наведене целе бројеве:

пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
ИнтСлице := [] инт { 10 , 13 , петнаест , Једанаест , 14 , 12 }
фмт . Принтлн ( „Несортирани комад:“ , ИнтСлице )
врста . Интс ( ИнтСлице )
фмт . Принтлн ( „Сортирани комад:“ , ИнтСлице )
}

Прво, декларишемо и иницијализујемо „ИнтСлице“ исечак са [10, 13, 15, 11, 14, 12] вредностима које представљају колекцију целих бројева који у почетку нису сортирани. Затим, функција сорт.Интс() се позива са „ИнтСлице“ пресеком као аргументом за сортирање „ИнтСлице“. Функција сорт.Интс() у овом случају интерно сортира сваки део пресека према оптимизованом алгоритму за сортирање. Он директно модификује оригинални исечак, преуређује његове елементе у сортирани редослед.

Следећи излаз прво показује да се прво приказује несортирани пресек, а затим сортирани пресек:

Пример 4: Исечак низа за сортирање Голанг

Го такође нуди функцију сорт.Стрингс() пакета сортирања која се користи за сортирање дела стрингова одређеним редоследом. Овде следећи програм помаже да се сортира део низова:

пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
стрСл := [] низ { 'голан' , 'питхон' , 'јава' , 'перл' , 'типкопис' }
врста . Стрингс ( стрСл )
фмт . Принтлн ( стрСл )
}

Прво смо успоставили „стрСл” исечак са [“голанг”, “питхон”, “јава”, “перл”, “типесцрипт”] вредностима које нису сортиране. Након тога сортирамо „стрСл” исечак помоћу функције сорт.Стрингс() која сортира елементе пресека по лексикографском редоследу. Ова функција директно модификује оригинални исечак, преуређује његове елементе у сортирани редослед на основу њихових АСЦИИ вредности.

Излаз сортира исечак низа на растући начин као што је приказано у следећем:

Пример 5: Голанг провера сортирања исечака помоћу функције ИнтАреСорт().

Међутим, са сорт.ИнтсАреСортед() функцијом Го, можемо проверити да ли је дати комад целих бројева сортиран у растућем редоследу или не. Размотрите следећи пример програма функције ИнтАреСорт() за дати исечак:

пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
сл := [] инт { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
фмт . Принтлн ( „Слице:“ )
фмт . Принтлн ( 'Несортирани комад: ' , сл )
резултат := врста . ИнтсАреСортед ( сл )
фмт . Принтлн ( ' Резултат:' )
фмт . Принтлн ( 'Да ли је дат Слице сортиран?: ' , резултат )
}

Прво, несортирани комад насумичних целих бројева је дефинисан као „сл“. Овај исечак садржи колекцију целих бројева без одређеног редоследа. Затим позивамо функцију сорт.ИнтсАреСортед() и прослеђујемо „сл“ исечак као аргумент. Ова функција обезбеђује Булов резултат који показује да ли је унос пресека распоређен у растућем редоследу. Затим, функција фмт.Принтлн() штампа резултате који излазе да ли је дати исечак сортиран или не на основу враћене Булове вредности.

Излаз приказује нетачно за редослед сортирања дела целих бројева пошто није сортирано:

Пример 6: Голанг Реверсе Сорт Слице

Даље, користећи функције сортРеверсе() и сортСтрингСлице() из пакета сортирања у Го-у, можемо обрнуто сортирати исечак низова. Следећи програм показује рад функције сорт.Реверсе():

пакет главни
увоз (
'фмт'
'врста'
)
фунц главни () {
вовелСлице := [] низ { 'То је' , 'а' , 'ја' , 'у' , 'О' }
фмт . Принтлн ( 'Пре сортирања:' , вовелСлице )
врста . Врста ( врста . Реверсе ( врста . СтрингСлице ( вовелСлице )))
фмт . Принтлн ( „Након  сортирања:“ , вовелСлице )
}

Почињемо тако што дефинишемо део низа „вовелСлице“ који садржи самогласнике „е“, „а“, „и“, „у“ и „о“. Почетни садржај наведеног дела стрингова се прво штампа помоћу функције „принт“. Затим се операција сортирања изводи помоћу функције сорт.Сорт() са функцијама сорт.Реверсе() и сорт.СтрингСлице() као аргументима. Овде „сорт.Реверсе()“ креира нови тип који мења редослед елемената. Узима тип „сорт.СтрингСлице” као свој аргумент који претвара вовелСлице у тип који се може сортирати.

Излаз овде приказује самогласнике обрнутим абецедним редом:

Закључак

Удубили смо се у различите функције сортирања са примерима који сортирају дати исечак. Такође смо говорили о сортирању под-среза и провери да ли је исечак већ сортиран. Дакле, можемо искористити могућности пакета за сортирање да бисмо се позабавили широким спектром изазова сортирања у њиховим Го пројектима.