Download presentation
Presentation is loading. Please wait.
1
MergeSort CSC 172
2
Sorting Lists with MergeSort
Note: a list of length 1 is sorted If two lists are sorted, how can you combine them into one sorted list? How can you divide one list into two?
3
Recursive Mergesort Basis: A list of length 1 is sorted
Induction: for lists of >= 1 element Split the list into two equal (as possible) parts Recursively sort each part Merge the result of the two recursive sorts One at a time, select the smaller element from the two fronts of each list Physical demo
4
Node split public static Node split(Node head){ Node secondNode;
if (head == null) return null; else if (head.getNext() == null) return null; else { secondNode = head.getNext(); head.setNext(secondNode.getNext()); secondNode.setNext(split(secondNode.getNext()); return secondNode; }
5
A linked List 6 1 3 2 5 9
6
A linked List in Split Split head 6 1 3 2 5 9
7
A linked List in Split secondNode = head.getNext(); Split 0
head secondNode 6 1 3 2 5 9
8
A linked List in Split head.setNext(secondNode.getNext()); Split 0
head secondNode 6 1 3 2 5 9
9
First recursive call in Split
secondNode.setNext(split(secondNode.getNext()); Split 0 head secondNode 6 1 3 2 5 9
10
New Split split(secondNode.getNext()); Split 1 head secondNode 6 1 3 2
5 9
11
New Split head.setNext(secondNode.getNext()); Split 1 head secondNode
6 1 3 2 5 9
12
Second recursive Split
secondNode.setNext(split(secondNode.getNext()); Split 1 head secondNode 6 1 3 2 5 9
13
Second recursive Split
secondNode.setNext(split(secondNode.getNext()); Split 2 head secondNode 6 1 3 2 5 9
14
Second recursive Split
head.setNext(secondNode.getNext()); Split 2 head secondNode 6 1 3 2 5 9 secondNode.setNext(split(secondNode.getNext()); ? What gets returned? return secondNode;
15
Backing up secondNode.setNext(split(secondNode.getNext()); Split 1
head secondNode 6 1 3 2 5 9
16
Backing up secondNode.setNext(split(secondNode.getNext()); Split 1
head secondNode 6 1 3 2 5 9 What gets returned? return secondNode;
17
Backing up secondNode.setNext(split(secondNode.getNext()); Split 1
head secondNode 6 1 3 2 5 9 What gets returned? return secondNode;
18
Backing up secondNode.setNext(split(secondNode.getNext()); Split 1
head secondNode 6 1 3 2 5 9 What gets returned? return secondNode;
19
Node Merge public static Node merge(Node list1, Node list2){
if (list1 == null) return list2; else if (list2 == null) return list1; else if (list1.getData.compareTo(list2.getData()) < 0) { list1.setNext(merge(list1.getNext(),list2); return list1; } else { list2.setNext(merge(list1,list2.getNext()); return list2; }
20
Two linked Lists 1 3 7 2 8 9
21
Two linked Lists in merge
1 3 7 list1 merge 0 list2 2 8 9
22
Two linked Lists in merge
0th 1 3 7 list1 merge 1 list2 2 8 9
23
Two linked Lists in merge
0th 1 3 7 list1 merge 2 list2 2 8 9 1st
24
Two linked Lists in merge
0th 2nd 1 3 7 list1 merge 3 list2 2 8 9 1st
25
Two linked Lists in merge
0th 2nd 3rd 1 3 7 list1 merge 4 list2 2 8 9 1st
26
Two linked Lists in merge
0th 2nd 1 3 7 list1 merge 3 list2 2 8 9 1st
27
Two linked Lists in merge
0th 2nd 1 3 7 list1 merge 2 list2 2 8 9 1st
28
Two linked Lists in merge
0th 2nd 1 3 7 list1 merge 2 list2 2 8 9 1st
29
Two linked Lists in merge
0th 2nd 1 3 7 list1 merge 0 list2 2 8 9 1st
30
Node MergeSort public static Node mergeSort(Node list){
Node secondList; if (list == null) return null; else if (list.getNext() == null) return list; else { secondList = split(list); return merge(mergeSort(list),mergeSort(secondList)); }
31
Mergesort 3 1 4 1 5 9 2 6
32
Mergesort: Split 6 3 1 4 1 5 9 2
33
Mergesort: Split 6 3 1 4 1 5 9 2
34
Mergesort: Split 9 6 3 1 4 1 5 2
35
Mergesort: Split 9 6 3 1 4 1 5 2
36
Mergesort: Split 1 9 6 3 1 4 5 2
37
Mergesort: Split 1 9 6 3 1 4 5 2
38
Mergesort: Split 1 1 9 6 3 4 5 2
39
Mergesort: Split 1 1 9 6 3 4 5 2
40
Mergesort: Split 6 1 1 9 3 4 5 2
41
Mergesort: Split 6 1 1 9 3 4 5 2
42
Mergesort: Split 1 6 1 9 3 4 5 2
43
Mergesort: Split 1 6 1 9 3 4 5 2
44
Mergesort: Split 6 1 1 9 3 4 5 2
45
Mergesort: Split 6 1 1 9 3 4 5 2
46
Mergesort: Merge 6 1 1 9 3 4 5 2
47
Mergesort: Merge 6 1 1 9 3 4 5 2
48
Mergesort: Merge 1 6 1 9 3 4 5 2
49
Mergesort: Split 1 6 1 9 3 4 5 2
50
Mergesort: Split 1 6 9 1 3 4 5 2
51
Mergesort: Split 1 6 9 1 3 4 5 2
52
Mergesort: Merge 1 6 9 1 3 4 5 2
53
Mergesort: Merge 1 6 9 1 3 4 5 2
54
Mergesort: Merge 1 6 1 9 3 4 5 2
55
Mergesort: Merge 6 1 1 9 3 4 5 2
56
Mergesort: Merge 6 1 1 9 3 4 5 2
57
Mergesort: Merge 1 1 6 9 3 4 5 2
58
Mergesort: Merge 1 1 6 9 3 4 5 2
59
Mergesort: Split 1 1 6 9 3 4 5 2
60
Mergesort: Split 1 1 6 9 2 3 4 5
61
Mergesort: Split 1 1 6 9 2 3 4 5
62
Mergesort: Split 1 1 6 9 4 2 3 5
63
Mergesort: Split 1 1 6 9 4 2 3 5
64
Mergesort: Split 1 1 6 9 2 4 3 5
65
Mergesort: Split 1 1 6 9 2 4 3 5
66
Mergesort: Merge 1 1 6 9 2 4 3 5
67
Mergesort: Merge 1 1 6 9 2 4 3 5
68
Mergesort: Merge 1 1 6 9 2 4 3 5
69
Mergesort: Split 1 1 6 9 2 4 3 5
70
Mergesort: Split 1 1 6 9 2 4 5 3
71
Mergesort: Split 1 1 6 9 2 4 5 3
72
Mergesort: Merge 1 1 6 9 2 4 5 3
73
Mergesort: Merge 1 1 6 9 2 4 5 3
74
Mergesort: Merge 1 1 6 9 2 4 3 5
75
Mergesort: Merge 1 1 6 9 4 2 3 5
76
Mergesort: Merge 1 1 6 9 4 2 3 5
77
Mergesort: Merge 1 1 6 9 2 3 4 5
78
Mergesort: Merge 1 1 6 9 2 3 4 5
79
Mergesort: Merge 1 6 9 1 2 3 4 5
80
Mergesort: Merge 6 9 1 1 2 3 4 5
81
Mergesort: Merge 6 9 1 1 2 3 4 5
82
Mergesort: Merge 6 9 1 1 2 3 4 5
83
Mergesort: Merge 6 9 1 1 2 3 4 5
84
Mergesort: Merge 6 9 1 1 2 3 4 5
85
Mergesort: Merge 1 1 2 3 4 5 6 9
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.