Сортування гребінцем

Сортування гребінцем
Visualisation of comb sort
КласАлгоритм сортування
Структура данихмасив
Найгірша швидкодія[1]
Найкраща швидкодія
Середня швидкодія
Просторова складність у найгіршому випадкуО(n) загальний, O(1) допоміжний
ОптимальнийТак

Сортування гребінцем (англ. Comb sort) — спрощений алгоритм сортування, розроблений Влодеком Добошєвічем (Wlodek Dobosiewicz) у 1980 році, і пізніше заново дослідженим та популяризованим Стефаном Лакеєм (Stephen Lacey) та Річардом Боксом (Richard Box), котрі написали про нього в журналі Byte Magazine у квітні 1991 р. Сортування гребінцем є поліпшенням алгоритму сортування бульбашкою, і конкурує у швидкодії з алгоритмом Швидке сортування. Основна його ідея полягає в тому, щоб усунути так званих «черепах», або малих значень ближче до кінця списку, оскільки у сортування бульбашкою вони сильно уповільнюють процес сортування. (Кролики та великі сортування на початку списку у сортуванні бульбашкою не являють собою проблеми).

У сортуванні бульбашкою, коли два елементи порівнюються, вони завжди мають розрив (відстань один від одного) рівну 1. Основна ідея сортування гребінцем полягає у тому, що цей розрив може бути більший одиниці. (Алгоритм Сортування Шелла також базується на даній ідеї, однак, він є модифікацією алгоритму сортування включенням, а не сортування бульбашкою).

Розрив починається зі значення, що рівне довжині списку, поділеного на фактор зменшення (зазвичай, 1.3; див. нижче), і список сортується з урахуванням цього значення (при необхідності воно заокруглюється до цілого). Потім розрив знову ділиться на фактор розриву, і список продовжує сортуватись з новим значенням, процес продовжується доти, доки розрив рівний 1. Далі список сортується з розривом рівним 1 доти, доки не буде повністю відсортований. Таким чином, фінальний етап сортування аналогічний такому ж у сортуванні бульбашкою, однак, до цього «черепахи» усуваються.

Фактор зменшення

Фактор зменшення справляє великий ефект на швидкість алгоритму сортування гребінцем. В оригінальній статті, автор пропонує значення 1.3 після багатьох експериментів з іншими значеннями.

Текст описує процес вдосконалення алгоритму використовуючи значення як фактор зменшення. Вона також мість приклад використання алгоритму на псевдокоді.

Приклади реалізації на різних мовах програмування

Псевдокод

function combsort11(array input)
    gap := input.size
    loop until gap > 1 and swaps = 1
        if gap > 1
            gap := gap / 1.3
        end if
        
i := 0 swaps := 0
loop until i + gap <= input.size if input[i] > input[i+gap] swap(input[i], input[i+gap]) swaps := 1 end if i := i + 1 end loop
end loop end function

C

int newGap(int gap)
{
    gap /= 1.3;
    if (gap < 1)
        return 1;

    return gap;
}

void combSort(int* a, int len)
{
    int gap = len;
    bool swapped = true;

    while (gap > 1 || swapped)
    {
        swapped = false;
        gap = newGap(gap);

        for (int i = 0; i < len - gap; ++i)
        {
            if (a[i] > a[i + gap])
            {
                swap(a[i], a[i + gap]);
                swapped = true;
            }
        }
    }
}

Java

private static int newGap(int gap)
{
        gap = gap * 10 / 13;
        if(gap < 1)
                return 1;

        return gap;
}

private static void sort(int a[])
{       int gap = a.length;
        boolean swapped;

        do {
                swapped = false;
                gap = newGap(gap);

		for(int i = 0; i < (a.length - gap); i++) {
			if(a[i] > a[i + gap]){
		        	swapped = true;
                                int temp = a[i];
                                a[i] = a[i + gap];
                                a[i + gap] = temp;
                        }
                }
        } while(gap > 1 || swapped);
}

Python

def update_gap(gap):
    gap = (gap * 10) / 13
    if gap == 9 or gap == 10:
        gap = 11
    return max(1, gap)

def combsort(x):
    gap = len(x)
    swapped = True
    if gap < 2:
        return
    while gap > 1 or swapped:
        gap = update_gap(gap)
        swapped = False
        for i in range(0, len(x) - gap, gap):
            if x[i] > x[i + gap]:
                x[i], x[i + gap] = x[i + gap], x[i]
                swapped = True

Див. також

Примітки

Read other articles:

Ketua Komite Tetap Kongres Rakyat NasionalLambang Republik Rakyat TiongkokPetahanaLi Zhanshusejak 17 Maret 2018Ditunjuk olehKongres Rakyat NasionalMasa jabatanLima tahun, dapat diperpanjanghanya sekali berturut-turutPejabat perdanaLiu ShaoqiDibentuk27 September 1954 Ketua Komite Tetap Kongres Rakyat Nasional Hanzi tradisional: 全國人民代表大會常務委員會委員長 Hanzi sederhana: 全国人民代表大会常务委员会委员长 Alih aksara Mandarin - Hanyu Pinyin: Quánguó R...

 

HolokausBagian dari Perang Dunia IIYahudi tiba di Auschwitz II di Polandia yang diduduki Jerman, Mei 1944. Banyak dari mereka yang diseleksi untuk dibunuh di kamar gas.LokasiEropa, terutama di Polandia yang diduduki Jerman dan Uni SovietTanggal1941–1945[1]Jenis seranganGenosida, penembakan massal, gas beracunKorban tewasKurang lebih 6 juta YahudiPelakuJerman Nazi bersama sekutunya Holokaus (dari bahasa Yunani ὁλόκαυστος holókaustos: hólos, seluruh dan kaustós, terbakar...

 

Coppa Italia Dilettanti Trentino-Alto AdigeSport Calcio TipoClub FederazioneFIGC Paese Italia OrganizzatoreFIGC - LND - Comitato Regionale Trentino-Alto Adige Cadenzaannuale Aperturaagosto Chiusuradicembre Partecipanti48 FormulaTorneo misto StoriaFondazione1991 Detentore Obermais Record vittorie Bolzano (5) Modifica dati su Wikidata · Manuale La Coppa Italia Dilettanti Trentino-Alto Adige è il massimo torneo di coppa della regione Trentino-Alto Adige, la prima edizione venne ...

Questa voce sull'argomento calciatori giamaicani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Disambiguazione – Ryan Johnson (calciatore) rimanda qui. Se stai cercando il calciatore nordirlandese, vedi Ryan Johnson (calciatore 1996). Ryan Johnson Nazionalità  Giamaica Altezza 185 cm Peso 82 kg Calcio Ruolo Attaccante Termine carriera 2016 Carriera Giovanili 2003-2004 Oregon Stat...

 

Questa voce sull'argomento Stagioni delle società calcistiche italiane è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Unione Sportiva Dilettantistica Palmese. Unione Sportiva PalmeseStagione 1978-1979Sport calcio SquadraPalmese 1914 Allenatore Piero Grasselli Presidente Lorenzo Maffettone Serie C28º nel girone D Maggiori presenzeCampionato: Cangiano, Scungio (32) Miglior marcatoreCa...

 

Daftar berikut ini berisi semua kota (termasuk kota kecil dan desa) di prefektur Aomori, Jepang, yang penduduknya berjumlah lebih dari 5.000 jiwa menurut sensus 2015. Per 1 Oktober 2015, ada 33 tempat yang memenuhi kriteria ini. Daftar ini hanya mencantumkan jumlah penduduk kota, kota kecil, dan desa di dalam batas resminya, tidak termasuk kotamadya atau kota pinggiran lain di kawasan sekitarnya. Daftar Aomori Hachinohe Hirosaki Tabel berikut ini berisi 33 kota, kota kecil, dan desa di Aomori...

American author (b. 1956) For other people named Michael Connelly, see Michael Connelly (disambiguation). Michael ConnellyConnelly at the detective fiction convention Bouchercon XLI in San Francisco, October 2010Born (1956-07-21) July 21, 1956 (age 67)Philadelphia, Pennsylvania, U.S.OccupationNovelistEducationSt. Thomas Aquinas High SchoolAlma materUniversity of FloridaGenreCrime fiction, thrillerSpouse Linda McCaleb ​(m. 1984)​Children1Websitemichaelcon...

 

Group of fruit culttivars This article is about the European plum cultivar. For the species of green plum from Asia, see Prunus mume. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Greengage – news · newspapers · books · scholar · JSTOR (July 2014) (Learn how and when to remove this message) Greengage Scien...

 

Commune in Bourgogne-Franche-Comté, France Commune in Bourgogne-Franche-Comté, FranceLoulleCommuneThe church in LoulleLocation of Loulle LoulleShow map of FranceLoulleShow map of Bourgogne-Franche-ComtéCoordinates: 46°42′32″N 5°52′56″E / 46.7089°N 5.8822°E / 46.7089; 5.8822CountryFranceRegionBourgogne-Franche-ComtéDepartmentJuraArrondissementLons-le-SaunierCantonChampagnoleGovernment • Mayor (2020–2026) Xavier Racle[1]Area110....

古斯塔夫·胡萨克Gustáv Husák捷克斯洛伐克共产党中央委员会总书记(1969-1971年称第一书记)任期1969年4月17日—1987年12月17日(18年244天)前任亞歷山大·杜布切克继任米洛什·雅克什捷克斯洛伐克总统任期1975年5月29日—1989年12月10日(14年195天)前任卢德维克·斯沃博达继任瓦茨拉夫·哈维尔 个人资料出生(1913-01-10)1913年1月10日 奥匈帝国布拉迪斯拉发杜布拉夫卡逝世1991年11...

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

 

此條目需要补充更多来源。 (2021年7月4日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:美国众议院 — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 美國眾議院 United States House of Representatives第118届美国国会众议院徽章 众议院旗...

For the municipality in the Magnesia prefecture, see Feres, Magnesia. Municipal unit in GreeceFeres ΦέρεςMunicipal unitFeresLocation within the regional unit Coordinates: 40°53′30″N 26°10′15″E / 40.89167°N 26.17083°E / 40.89167; 26.17083CountryGreeceAdministrative regionEast Macedonia and ThraceRegional unitEvrosMunicipalityAlexandroupoliMunicipality established1986Area • Municipal unit411.2 km2 (158.8 sq mi)Elevation43 ...

 

Israeli political party (1984-) For other uses, see Shas (disambiguation). Shas ש״ס‎LeaderAryeh DeriSpiritual LeaderVacantFoundersElazar ShachOvadia YosefFounded1984; 40 years ago (1984)Split fromAgudat YisraelHeadquartersJerusalemIdeologyPopulism[1]Religious Zionism[2]Social conservatism[3][4]Religious conservatism[5]Social democracy[6][7]Sephardic and Mizrahi interestsHaredi interests[8][9 ...

 

Human settlement in EnglandBayworthBayworth Baptist ChurchBayworthLocation within OxfordshireOS grid referenceSP500012Civil parishSunningwellDistrictVale of White HorseShire countyOxfordshireRegionSouth EastCountryEnglandSovereign stateUnited KingdomPost townAbingdonPostcode districtOX13Dialling code01865PoliceThames ValleyFireOxfordshireAmbulanceSouth Central UK ParliamentOxford West and AbingdonWebsiteSunningwell Parish Council List of places UK England O...

History of the feminist movement in France Part of a series onFeminism History Feminist history History of feminism Women's history American British Canadian German Waves First Second Third Fourth Timelines Women's suffrage Muslim countries US Other women's rights Women's suffrage by country Austria Australia Canada Colombia India Japan Kuwait Liechtenstein New Zealand Spain Second Republic Francoist Switzerland United Kingdom Cayman Islands Wales United States states Intersectional variants ...

 

John Willard MilnorLahir20 Februari 1931 (umur 93)Orange, New JerseyTempat tinggalAmerikaKebangsaanAmerikaAlmamaterPrinceton UniversityDikenal atasExotic spheresFary–Milnor theoremPenghargaanKompetisi Putnam (1949, 1950) Medali Fields (1962) National Medal of Science (1967) Penghargaan Steele (1982) Penghargaan Wolf (1989) Penghargaan Abel (2011)Karier ilmiahBidangMatematikaInstitusiStony Brook UniversityPembimbing doktoralRalph FoxMahasiswa doktoralTadatoshi Akiba Jon Folkman John Ma...

 

Epagneul and Épagneul redirect here. For breeds whose name contains épagneul, see pages such as Épagneul Français. Dog type For the Thoroughbred racehorse, see Spaniel (horse). For the American R&B doo-wop group from the 1950s, see The Spaniels. English Cocker Spaniels are small spaniels A Welsh Springer Spaniel on the beach A spaniel is a type of gun dog. Spaniels were especially bred to flush game out of denser brush. By the late 17th century, spaniels had been specialized into wate...

Architectural structure in City of Edinburgh, Scotland, UK Inverleith HouseLocation within the City of Edinburgh council areaGeneral informationLocationInverleith, EdinburghAddressArboretum Road and Inverleith RowTown or cityEdinburgh EH3 5NZCountryScotlandCoordinates55°57′54″N 3°12′37″W / 55.9650°N 3.2102°W / 55.9650; -3.2102Construction started1774ClientJames RocheidDesign and constructionArchitect(s)David HendersonWebsiterbge.org.uk/inverleith-house Inve...

 

Chilean writer (born 1980) Benjamin LabatutLabatut in 2014BornBenjamín Labatut1980 (age 43–44)Rotterdam, NetherlandsNationalityChileanOccupationWriterNotable workWhen We Cease to Understand the WorldThe MANIACAwardsSantiago Municipal Literature Award (2013) Benjamín Labatut (born 1980) is a Chilean writer. Early life Labatut was born in Rotterdam, Netherlands. He spent his childhood in The Hague, Buenos Aires, and Lima. He moved to Santiago at the age of 14. Writing Labatut's fir...