>> [MUSIK SPELA]
>> ZAMYLA CHAN: Det första du kanske meddelande om fyndet är att vi redan
har kod skriven för oss.
Detta kallas distributionskoden.
Så vi inte bara skriva vår egen koda från grunden längre.
I stället ska vi fylla i tomrummen i någon befintlig kod.
>> Den find.c Programmet frågar efter siffror att fylla höstacken, söker
höstack för en användare lämnade nål, och den gör det genom att ringa sortera och
sökning, funktioner definierade i helpers.c.
Så find.c är redan skrivet.
Ditt jobb är att skriva hjälpare.
>> Så vad gör vi?
Vi ska genomföra två funktioner.
Sök, som returnerar true om ett värde påträffas i höstacken, återvänder
false om värdet är inte i höstacken.
Och då vi genomför också sortera som sorterar arrayen kallas värden.
>> Så låt oss ta itu sökning.
Sök för närvarande genomförs som en linjär sökning, men du kan göra mycket
bättre än så.
Linjär sökning genomförs i O n tid, vilket är ganska långsam.
Även om, kan det söka någon lista som ges till det.
Ditt jobb är att implementera binär sökning, som har körtid O i log n.
Det är ganska snabbt.
>> Men det finns en bestämmelse.
Binär sökning kan endast söka genom pre-sorterade listor.
Varför är det?
>> Nåväl låt oss titta på ett exempel.
Givet en matris med värden, höstacken, vi kommer att vara ute
för en nål.
Och i detta exempel, heltalet tre.
Det sätt som binär sökning fungerar är att vi jämför det mittersta värdet av
arrayen till nålen, ungefär som hur Vi öppnade en telefonbok till mitten
sida i vecka noll.
>> Så efter att ha jämfört det mittersta värdet till nålen, kan du kasta antingen
vänstra eller den högra halvan av matrisen genom att dra dina gränser.
I det här fallet, sedan tre, vår nål, är mindre än 10, det mittersta värdet, den
rätt bunden kan minska.
Men försök att göra dina gränser så tätt som möjligt.
Om det mittersta värdet är inte av nålen, då vet du att du inte behöver
inkludera det i din sökning.
Så du har rätt bunden kan dra åt sökning bounds bara en liten bit mer,
och så vidare och så vidare till dess att du hittar din nål.
>> Så vad pseudokod ut?
Väl när vi letar fortfarande igenom listan och fortfarande har element till
titta in, tar vi i mitten av listan, och jämför det mittersta värdet till
vår nål.
Om de är lika, då det innebär att vi har hittade nålen och vi kan
return true.
>> Annars, om nålen är mindre än det mittersta värdet, då det innebär att vi
kan kasta den högra halvan, och bara söka den vänstra sidan av matrisen.
I annat fall kommer vi att söka på höger sida av kedjan.
Och i slutet, om du inte har några fler element kvar att söka, men du
har inte hittat din nål ännu, då du return false eftersom nålen
definitivt inte i höstacken.
>> Nu en snygg sak om denna pseudo i binär sökning är att det kan vara
tolkas som antingen en iterativ eller rekursiv genomförande.
Så det skulle vara rekursiv om du heter sökfunktionen i sökandet
fungera på vardera halvan av matrisen.
Vi täcker rekursion lite senare i naturligtvis, men vet att det är en
alternativet om du vill prova.
>> Nu ska vi titta på sort.
Sortera tar en matris och heltalet n, vilket är storleken på matrisen.
Nu finns det flera olika typer av slag, och du kan titta på några
shorts för demos och förklaringar.
Retur typ för vår sorteringsfunktionen är ogiltig.
Så det betyder att vi inte kommer att återvända någon array från slag.
Vi ska faktiskt går att förändra mycket array som leddes in oss.
>> Och det är möjligt eftersom arrayer är passerade genom hänvisning i C. Nu ska vi
se mer om detta senare, men det väsentlig skillnad mellan passerande
i något som liknar ett heltal och passerar i en matris, är att när man
passera i ett heltal, är C bara att göra en kopia av detta heltal och passera
det till funktionen.
Den ursprungliga variabeln ändras inte när funktionen är slutförd.
Med en array, å andra sidan, är det inte att göra en kopia, och du kommer
faktiskt redigera mycket array själv.
>> Så en typ av slag är urvals sort.
Valet sortera fungerar genom att starta vid början, och sedan iterera
över och hitta det minsta elementet.
Och sedan byta det minsta element med den första.
Och då du flyttar till det andra elementet , Hitta den näst minsta
elementet, och sedan byta den med andra element i arrayen eftersom
det första elementet är redan sorterade.
Och så då fortsätter för varje elementet i att identifiera den minsta
värde och byta ut den.
>> För jag är lika med 0, den allra första elementet till n minus 1, du kommer att jämföra
varje nästa värde efter det och hitta indexet för det minsta värdet.
När du hittar det minsta värdet index, du kan byta det värdet av array
minimum och array I.
>> En annan typ av slag som du kan genomföra är bubbla sortera.
Så bubbla sortera itererar över listan jämföra intilliggande element och
byta de delar som är i fel ordning.
Och på detta sätt, det största elementet kommer bubbla till slutet.
Och listan sorteras en gång inte mer delar har bytts.
>> Så de är två exempel på slag algoritmer som du kan genomföra för
fyndet programmet.
När du är klar sorterar, och du har gjort sökningen, är du klar.
Mitt namn är Zamyla, och detta är CS50.
>> [MUSIK SPELA]