Selection sort
Селеcтион сорт — Танлаб саралаш бу — оддий тартиблаш алгоритмидир. Ушбу тартиблаш алгоритми ўз жойида таққослашга асосланган алгоритм бўлиб, унда рўйхат икки қисмга бўлинади, тартибланган қисм чап томонда ва тартибланмаган қисм ўнг томонда. Дастлаб, тартибланган қисм бўш, тартибланмаган қисми эса бутун рўйхатдир.
Энг кичик элемент тартибланмаган массивдан танланади ва энг чап элемент билан алмаштирилади ва бу элемент тартибланган массивнинг бир қисмига айланади. Бу жараён тартибланмаган массив чегарасини битта элемент билан ўнгга силжитишда давом этади.
Ушбу алгоритм катта маълумотлар тўпламлари учун мос эмас, чунки унинг ўртача ва энг ёмон ҳолатлари мураккаблиги н (н2), бу ерда н — элементлар сони.[1]
Танлаб саралаш қандай ишлайди?
Мисол тариқасида қуйидаги массивни кўриб чиқамиз: арр[] = {64, 25, 12, 22, 11}
Биринчи ўтиш: Сараланган массивдаги биринчи ўрин учун бутун массив 0 дан 4 гача бўлган индексдан кетма-кет ўтказилади. Ҳозирги вақтда 64 сақланадиган биринчи позиция, бутун массивни айланиб ўтгандан сўнг, 11 энг паст қиймат эканлиги аён бўлади.
64 25 12 22 11
Шундай қилиб, 64 ни 11 билан алмаштиринг. Бир итерациядан сўнг массивдаги энг кам қиймат бўлган 11 , тартибланган рўйхатнинг биринчи позициясида пайдо бўлади.
11 25 12 22 64
Иккинчи ўтиш: 25 мавжуд бўлган иккинчи позиция учун массивнинг қолган қисмини яна кетма-кетликда айлантиринг.
11 25 12 22 64
Кетишдан сўнг биз 12 массивдаги иккинчи энг паст қиймат эканлигини ва у массивда иккинчи ўринда пайдо бўлиши кераклигини аниқладик, шунинг учун бу қийматларни алмаштиринг.
11 12 25 22 64
Учинчи ўтиш: Энди, учинчи ўрин учун, 25 мавжуд бўлган жойда яна массивнинг қолган қисмини айланиб ўтинг ва массивдаги учинчи энг кам қийматни топинг.
11 12 25 22 64
Кетиш пайтида 22 учинчи энг кам қиймат бўлиб чиқди ва у массивда учинчи ўринда пайдо бўлиши керак, шунинг учун 22 ни учинчи ўриндаги элемент билан алмаштиринг.
11 12 22 25 64
Тўртинчи ўтиш: Худди шундай, тўртинчи позиция учун массивнинг қолган қисмини кесиб ўтинг ва массивдаги тўртинчи энг кичик элементни топинг. 25 4-энг паст қиймат бўлгани учун у тўртинчи ўринни эгаллайди.
11 12 22 25 64
Бешинчи ўтиш: Ниҳоят, массивда мавжуд бўлган энг катта қиймат автоматик равишда массивнинг охирги позициясига жойлаштирилади Олинган массив тартибланган массивдир.
11 12 22 25 64

Танлаб саралаш алгоритми
- 1-қадам − МИНни 0-индехли жойга қўйинг
- 2-қадам − Рўйхатдаги минимал элементни қидиринг
- 3-қадам − МИН манзилидаги қиймат билан алмаштиринг
- 4-қадам − Кейинги элементга ишора қилиш учун МИН ни оширинг
- 5-қадам − Рўйхат тартиблаштирилгунча такрорланг
Дастури
C++ код намунаси
# инcлуде <биц/стдc++.ҳ>
усинг намеспаcе стд;
воид сwап(инт *хп, инт *йп)
{
инт темп = *хп;
*хп = *йп;
*йп = темп;
}
воид селеcтионСорт(инт арр[], инт н)
{
инт и, ж, мин_идх;
фор (и = 0; и < н-1; и++)
{
мин_идх = и;
фор (ж = и+1; ж < н; ж++)
иф (арр[ж] < арр[мин_идх])
мин_идх = ж;
сwап(&арр[мин_идх], &арр[и]);
}
}
воид принтАррай(инт арр[], инт сизе)
{
инт и;
фор (и=0; и < сизе; и++)
cоут << арр[и] << " ";
cоут << эндл;
}
инт маин()
{
инт арр[] = {64, 25, 12, 22, 11};
инт н = сизеоф(арр)/сизеоф(арр[0]);
селеcтионСорт(арр, н);
cоут << "Сортед аррай: \н";
принтАррай(арр, н);
ретурн 0;
}Пйтҳон код намунаси :
деф селеcтионСорт(арр):
фор и ин ранге(лен(арр)):
смаллест_индех = и
фор ж ин ранге(и+1, лен(арр)):
иф арр[ж] < арр[смаллест_индех]:
смаллест_индех = ж
арр[и], арр[смаллест_индех] = арр[смаллест_индех], арр[и]
ретурн арр
Манбалар
Бу мақола бирорта туркумга қўшилмаган. Илтимос, мақолага алоқадор туркумлар қўшиб ёрдам қилинг. (Апрел 2024) |