Vad är en "lista med två stackar"? Hej! Hej Martin, Hade glömt bort stacksortering. Principen är följande Här kommer en lösning med listan som Jan nämde.Sv: Stacksortering
En stack går inte att sortera eftersom den är just en stack (sist in, först ut).
Om du har en lista eller en vector är det bara att göra std:sort(minlista.begin(), minlista.end());
(under förutsättning att elementen går att jämföra med "<")
Berätta lite vad du har för data så är det enklare att hjälpa dig.Sv:Stacksortering
Man använder två stackar för att sortera listan, kallas för Stacksortering (eng. StackSort).
Finns på nätet info, sök på Stacksort.
Har glömt hur det gick till (har lösningen hemma).
Men på ett ungefär, läs ett värde från listan och lägg i ena stacken.
Läs ett nytt värde från listan, jämför med värde i första stacken.
Om det är t.ex. större lägg det i den andra stacken.
Är det mindre, flytta det första värdet till andra stacken och lägg ner det senaste i den första.
Sedan läser man in värdena tillbaka till listan, en stack i taget.
O.s.v o.s.v.
Bara så att principen framgår lite grand.
Som sagt har glömt den exakta logiken för hur algoritmen är uppbyggd.
Jag stötte på den som ett exempel på sortering, när jag läste på universitetet.
Vi hade den som en lab. övning, kanske samma här?
//HåkanSv:Stacksortering
Jo, det är så att jag har en lista med innehåll. Listans innehåll ska flyttas till de bägge stackarna på ett sätt som jag inte vet hur. Och så ska man kunna sortera listan mha de bägge stackarna. Kruxet är att jag inte vet hur prioriteten ska vara. Dvs hur de stoppas in i stackarna.
/JanSv: Stacksortering
Du har två stackar (s1 & s2) som du flyttar element emellan. Se det som att listan börjar i S1 och fortsätter i S2.
(s1 har högsta talet på toppen och s2 har lägsta talet på toppen)
---- S1 S2--------
2 4 6 8 10 12 14
När man skall stoppa in ett tal t.ex. 11
flyttar man talen från S2 tills 11 ligger mellan toppen i respektive stack
---------S1 S2----
2 4 6 8 10 12 14
Sedan stoppar man in 11 i antingen S1 eller S2 (spelar ingen roll vilken)
-----------S1 S2----
2 4 6 8 10 11 12 14
Om man sen skall stoppa in 7 flyttar man från S1 till S2
---S1 S2------------
2 4 6 8 10 11 12 14
och så vidare tills alla talen är instoppade.
Edit: formatteringSv: Stacksortering
<b>L: p e k a v s</b>
<b>S1:</b>
<b>S2:</b>
Läs från början på listan lägg i S1.
<b>S1: p</b>
<b>S2:</b>
Läs nästa från listan. Jämför med det översta i S1.
Om "mindre" lägg i S2 annars i S1.
Fortsätt tills listan är tom.
Ser ut så här efter första inläsningen.
<b>S1: p v</b>
<b>S2: e k a s</b>
Läs tillbaka till listan. Ta det "största" av de två översta i varje stack.
Listan blir då så här.
<b>L: v s p a k e</b>
Läs tillbaka från slutet av listan enligt ovanstående princip.
Blir så här
<b>S1: e k p s v</b>
<b>S2: a</b>
Tillbaka till listan enligt ovanstående.
Listan ser då ut så här:
<b>L: v s p k e a</b>
Läs från slutet på listan igen o.s.v. o.s.v. ......
Sorteringen är klar när man läst från listan, och inget element hamnat i S2.
//Håkan