Presentation is loading. Please wait.

Presentation is loading. Please wait.

MergeSort CSC 172.

Similar presentations


Presentation on theme: "MergeSort CSC 172."— Presentation transcript:

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


Download ppt "MergeSort CSC 172."

Similar presentations


Ads by Google