Heapsort - cse.chalmers.se · Heapsort Mergesort har komplexitet O(n log n) men det kräver...

Preview:

Citation preview

Koffman & Wolfgangkapitel 8, avsnitt 8

Heapsort

1

Heapsort

Mergesort har komplexitet O(n log n)men det kräver temporärt ett extra fält

Heapsort kräver inte något extraminnedet är en in-place-algoritmsom namnet antyder använder algoritmen en heap för att sortera fältet

2

Första versionen av Heapsort

En enkel Heapsort-algoritm:skapa en tom heaptag ett element i taget ur fältet och stoppa in i heapentag sedan ut elementen ur heapen ett i taget och stoppa tillbaka i fältet

Denhär versionen kräver extraminnehur gör man detta in-place?

3

Heapsort in-place

Antag att vi har ett fält med n elementlåt första elementet vara en heap med ett elementutöka heapen med ett element i tagetlåt elementet bubbla upp till rätt plats i heapen

Nu har vi en heap; hur gör vi den till en lista?byt ut det översta elementet med det sistaminska heapens storlek, och låt det nya översta elementet bubbla ner till rätt ställefortsätt så tills heapen bara har ett element

Vi måste bygga heapen som en max-heap, eftersom vi flyttar elementen sist i fältet hela tiden

4

Trace of Heapsort

89

76 74

37 32 39 66

20 26 18 28 29 6

Heap OK

Trace of Heapsort (cont.)

89

76 74

37 32 39 66

20 26 18 28 29 6

Remove

Trace of Heapsort (cont.)

6

76 74

37 32 39 66

20 26 18 28 29 89

Reheap

Trace of Heapsort (cont.)

76

6 74

37 32 39 66

20 26 18 28 29 89

Trace of Heapsort (cont.)

76

37 74

6 32 39 66

20 26 18 28 29 89

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Heap OK

Trace of Heapsort (cont.)

76

37 74

26 32 39 66

20 6 18 28 29 89

Remove

Trace of Heapsort (cont.)

29

37 74

26 32 39 66

20 6 18 28 76 89

Reheap

Trace of Heapsort (cont.)

74

37 29

26 32 39 66

20 6 18 28 76 89

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Heap OK

Trace of Heapsort (cont.)

74

37 66

26 32 39 29

20 6 18 28 76 89

Remove

Trace of Heapsort (cont.)

28

37 66

26 32 39 29

20 6 18 74 76 89

Reheap

Trace of Heapsort (cont.)

66

37 28

26 32 39 29

20 6 18 74 76 89

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Heap OK

Trace of Heapsort (cont.)

66

37 39

26 32 28 29

20 6 18 74 76 89

Remove

Trace of Heapsort (cont.)

18

37 39

26 32 28 29

20 6 66 74 76 89

Reheap

Trace of Heapsort (cont.)

39

37 18

26 32 28 29

20 6 66 74 76 89

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

39

37 29

26 32 28 18

20 6 66 74 76 89

Remove

Trace of Heapsort (cont.)

6

37 29

26 32 28 18

20 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

37

6 29

26 32 28 18

20 39 66 74 76 89

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

37

32 29

26 6 28 18

20 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

20

32 29

26 6 28 18

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

32

20 29

26 6 28 18

37 39 66 74 76 89

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

32

26 29

20 6 28 18

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

18

26 29

20 6 28 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

29

26 18

20 6 28 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

29

26 28

20 6 18 32

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

18

26 28

20 6 29 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

28

26 18

20 6 29 32

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

6

26 18

20 28 29 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

26

6 18

20 28 29 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

26

20 18

6 28 29 32

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

6

20 18

26 28 29 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

20

6 18

26 28 29 32

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Heap OK

Trace of Heapsort (cont.)

18

6 20

26 28 29 32

37 39 66 74 76 89

Remove

Trace of Heapsort (cont.)

6

18 20

26 28 29 32

37 39 66 74 76 89

Reheap

Trace of Heapsort (cont.)

6

18 20

26 28 29 32

37 39 66 74 76 89

Heap OK

Heapsort, implementering

Vi implementerar heapen som ett fält:

fältet är uppdelat i en heap-del och en sorterad listavarje element vi tar bort flyttas till slutet av fältetheap-delen av fältet minskar successivt

Heapsort, algoritm

Algoritm för In-Place Heapsort

1. while n is less than table.length:2. increment n by 1 (this inserts a new item into the heap)3. restore the heap property4.while the heap is not empty:5. remove the first item from the heap by swapping it with the last item in the heap 6. restore the heap property

Analys av Heapsort

Heapar är logaritmiska:stoppa in/ta bort element är O(log n) att stoppa in n element är O(n log n) att ta bort n element är också O(n log n) O(n log n) + O(n log n) = O(n log n)algoritmen kräver inget extra minne

63

Recommended