180 likes | 393 Views
Några standardalgoritmer. Utökning och minskning av vektor Sortering av vektor Sökning i vektor Sammanslagning av sorterade vektorer. Indata: vektor, nytt. Utökning. Skapa nyVektor med längden av vektor + 1. i = 0. i < vektorns längd. nyVektor[i] = vektor[i]. i = i + 1. true.
E N D
Några standardalgoritmer Utökning och minskning av vektor Sortering av vektor Sökning i vektor Sammanslagning av sorterade vektorer
Indata: vektor, nytt Utökning Skapa nyVektor med längden av vektor + 1 i = 0 i < vektorns längd nyVektor[i] = vektor[i] i = i + 1 true false Lägg nytt på sista platsen i nyVektor returnera nyVektor Utökning av en vektor (FD)
Indata: vektor, nytt Utökning Stomme Yttre loop Skapa nyVektor med längden av vektor + 1 i = 0 Lägg nytt på sista platsen i nyVektor returnera nyVektor (i < vektorns längd) * nyVektor[i] = vektor[i] i = i + 1 Utökning av en vektor (JSP)
Indata: vektor, index SlimArray Skapa nyVektor med längden av vektor - 1 i = index + 1 i = 0 i < index nyVektor[i] = vektor[i] i = i + 1 i < vektorns längd true nyVektor[i-1] = vektor[i] i = i + 1 true false false returnera nyVektor Minskning av en vektor (FD)
Indata: vektor, index SlimArray Stomme Första loop Skapa nyVektor med längden av vektor - 1 i = 0 i = index + 1 Stomme Andra loop returnera nyVektor (i < index) (i < vektorns längd) * * nyVektor[j] = vektor[i] i = i + 1 nyVektor[j] = vektor[i] i = i + 1 Minskning av en vektor (JSP)
Swap JSP Flödesdiagram Swap Indata: vektor index a index b Indata: vektor index a index b Swap temp = vektor[a] vektor[a] = vektor[b] temp = vektor[a] vektor[a] = vektor[b] vektor[b] = temp vektor[b] = temp Stopp
Indata: vektor BubbleSort (FD) BubbleSort true osorterad = true osorterad? osorterad = false end = längden av vektorn - 1 false j = 0 j = j + 1 false vektor[j] > vektor[j + 1] j < end true false true Swap (vektor, j, j+1) osorterad = true end = end - 1 Stopp
Indata: vektor BubbleSort BubbleSort (JSP) osorterad = true end = längden av vektorn - 1 Stomme Yttre loop (osorterad) * osorterad = false j = 0 Stomme Inre loop end = end - 1 (j < end) * Selektion j = j + 1 ( vektor[j] > vektor[j + 1] ) o Swap (vektor, j, j+1) osorterad = true
Indata: vektor ExchangeSort (FD) Exchange i = 0 i = i + 1 i < vektorns längd - 1? true minst = i false j = i + 1 j = j + 1 false vektor[minst] > vektor[j] j < vektorns längd true true minst = j false true i < minst Swap (vektor, minst, i) Stopp false
ExchangeSort (JSP) Indata: vektor Exchange i = 0 Stomme Yttre loop (i < vektorns längd - 1) * minst = i j = i + 1 Stomme Inre loop Selektion i = i + 1 (i < minst) (j < vektorns längd ) o Swap (vektor, minst, i) * Selektion j = j + 1 ( vektor[minst] > vektor[j] ) o minst = j
Flödesdiagram Linjär sökning Linjär Sökning Indata: vektor, target JSP i = 0 Indata: vektor, target Linjär sökning i < vektorns längd? false returnera -1 returnera -1 i = 0 Iteration (i < vektorns längd) true * vektor[i] == target true returnera i Selektion i = i + 1 false ( vektor[i] = target ) o minst = j returnera i
Binär sökning (FD) Indata: vektor, target high – low > 1 Binär Sökning true high = vektorns längd false low = -1 eller vektor[low] <> target true probe = (high + low) / 2 low = -1 vektor[probe] > target false returnera low returnera -1 true false low = probe high = probe
Binär sökning (JSP) Indata: vektor, target Binär sökning high = vektorns längd low = -1 Iteration Selektion ( low = -1 eller vektor[low] <> target) (high – low > 1) o o returnera -1 returnera low * probe = (high + low) / 2 Selektion (vektor[probe] > target) o o high = probe low = probe
first är tom second är tom false Skapa ny vektor merged med längd av first + second countFirst = 0 countSecond = 0 i = 0 false Merge Förena listor (FD) Indata vektorer: first , second true true returnera second returnera first i = i + 1 i < längden av merged false returnera merged true first[countFirst] < second[countSecond] countFirst = längden på first countSecond = längden på second false false false true true true Merged[i] = second[countSecond] Merged[i] = first[countFirst] Merged[i] = first[countFirst] Merged[i] = second[countSecond] countSecond = countSecond + 1 countFirst = countFirst + 1 countFirst = countFirst + 1 countSecond = countSecond + 1
Indata vektorer: first, second Merge Förena listor (JSP) Selektion Skapa ny vektor merged med längd av first + second countFirst = 0 countSecond = 0 i = 0 Iteration returnera merged (i < längden av merged) (om first är tom) (om second är tom) * returnera second returnera first o o i = i + 1 Selektion (countFirst = längden på first) (first[countFirst] < second[countSecond] ) (countSecond = längden på second) o o o o merged[i] = first[countFirst] countFirst = countFirst + 1 merged[i] = second[countSecond] countSecond = countSecond + 1 merged[i] = first[countFirst] countFirst = countFirst + 1 merged[i] = second[countSecond] countSecond = countSecond + 1
Sortering och sökning på annat än heltal • Om vi ex. vill sortera en vektor av böcker, måste vi jämföra på annat än numeriska värden: if ( vektor[probe].ISBN.CompareTo( target ) > 0 ) • Som Du ser kan vi här inte använda de vanliga relationsoperatorerna, eftersom string inte implementerat dem, utan vi är då istället tvungna att använda metoden CompareTo.
Brytning av listor Att tänka på: Vilket eller vilka fält sorterar vi efter? Vilket eller vilka fält bryter vi på? Vilka variabler skall nollställas vid brytningen? Vilka skall inte nollställas?