SlideShare a Scribd company logo
Simple Sorting Algorithms
2
Bubble sort
 Compare each element (except the last one) with its
neighbor to the right
 If they are out of order, swap them
 This puts the largest element at the very end
 The last element is now in the correct and final place
 Compare each element (except the last two) with its
neighbor to the right
 If they are out of order, swap them
 This puts the second largest element next to last
 The last two elements are now in their correct and final places
 Compare each element (except the last three) with its
neighbor to the right
 Continue as above until you have no unsorted elements on the left
3
Example of bubble sort
7 2 8 5 4
2 7 8 5 4
2 7 8 5 4
2 7 5 8 4
2 7 5 4 8
2 7 5 4 8
2 5 7 4 8
2 5 4 7 8
2 7 5 4 8
2 5 4 7 8
2 4 5 7 8
2 5 4 7 8
2 4 5 7 8
2 4 5 7 8
(done)
4
Code for bubble sort
 public static void bubbleSort(int[] a) {
int outer, inner;
for (outer = a.length - 1; outer > 0; outer--) { // counting down
for (inner = 0; inner < outer; inner++) { // bubbling up
if (a[inner] > a[inner + 1]) { // if out of order...
int temp = a[inner]; // ...then swap
a[inner] = a[inner + 1];
a[inner + 1] = temp;
}
}
}
}
5
Analysis of bubble sort
 for (outer = a.length - 1; outer > 0; outer--) {
for (inner = 0; inner < outer; inner++) {
if (a[inner] > a[inner + 1]) {
// code for swap omitted
} } }
 Let n = a.length = size of the array
 The outer loop is executed n-1 times (call it n, that’s close enough)
 Each time the outer loop is executed, the inner loop is executed
 Inner loop executes n-1 times at first, linearly dropping to just once
 On average, inner loop executes about n/2 times for each execution
of the outer loop
 In the inner loop, the comparison is always done (constant time), the
swap might be done (also constant time)
 Result is n * n/2 * k, that is, O(n2/2 + k) = O(n2
)
6
Loop invariants
 You run a loop in order to change things
 Oddly enough, what is usually most important in understanding a
loop is finding an invariant: that is, a condition that doesn’t
change
 In bubble sort, we put the largest elements at the end, and once
we put them there, we don’t move them again
 The variable outer starts at the last index in the array and decreases to 0
 Our invariant is: Every element to the right of outer is in the correct place
 That is, for all j > outer, if i < j, then a[i] <= a[j]
 When this is combined with the loop exit test, outer == 0, we know that
all elements of the array are in the correct place
7
Selection sort
 Given an array of length n,
 Search elements 0 through n-1 and select the smallest

Swap it with the element in location 0
 Search elements 1 through n-1 and select the smallest

Swap it with the element in location 1
 Search elements 2 through n-1 and select the smallest

Swap it with the element in location 2
 Search elements 3 through n-1 and select the smallest

Swap it with the element in location 3
 Continue in this fashion until there’s nothing left to search
8
Example and analysis of selection sort
 The selection sort might swap an
array element with itself--this is
harmless, and not worth checking for
 Analysis:
 The outer loop executes n-1 times
 The inner loop executes about n/2
times on average (from n to 2 times)
 Work done in the inner loop is constant
(swap two array elements)
 Time required is roughly (n-1)*(n/2)
 You should recognize this as O(n2
)
7 2 8 5 4
2 7 8 5 4
2 4 8 5 7
2 4 5 8 7
2 4 5 7 8
9
Code for selection sort
public static void selectionSort(int[] a) {
int outer, inner, min;
for (outer = 0; outer < a.length - 1; outer++) {
min = outer;
for (inner = outer + 1; inner < a.length; inner++) {
if (a[inner] < a[min]) {
min = inner;
}
// Invariant: for all i, if outer <= i <= inner, then a[min] <= a[i]
}
// a[min] is least among a[outer]..a[a.length - 1]
int temp = a[outer];
a[outer] = a[min];
a[min] = temp;
// Invariant: for all i <= outer, if i < j then a[i] <= a[j]
}
}
10
Invariants for selection sort
 For the inner loop:
 This loop searches through the array, incrementing inner from its initial
value of outer+1 up to a.length-1
 As the loop proceeds, min is set to the index of the smallest number
found so far
 Our invariant is:
for all i such that outer <= i <= inner, a[min] <= a[i]
 For the outer (enclosing) loop:
 The loop counts up from outer = 0
 Each time through the loop, the minimum remaining value is put in
a[outer]
 Our invariant is:
for all i <= outer, if i < j then a[i] <= a[j]
11
Insertion sort
 The outer loop of insertion sort is:
for (outer = 1; outer < a.length; outer++) {...}
 The invariant is that all the elements to the left of outer
are sorted with respect to one another
 For all i < outer, j < outer, if i < j then a[i] <= a[j]
 This does not mean they are all in their final correct place; the
remaining array elements may need to be inserted
 When we increase outer, a[outer-1] becomes to its left; we must
keep the invariant true by inserting a[outer-1] into its proper
place
 This means:

Finding the element’s proper place

Making room for the inserted element (by shifting over other
elements)

Inserting the element
12
One step of insertion sort
3 4 7 12 14 14 20 21 33 38 10 55 9 23 28 16
sorted next to be inserted
3 4 7 55 9 23 28 16
10
temp
3833212014141210
sorted
less than 10
13
Analysis of insertion sort
 We run once through the outer loop, inserting each of n
elements; this is a factor of n
 On average, there are n/2 elements already sorted
 The inner loop looks at (and moves) half of these
 This gives a second factor of n/4
 Hence, the time required for an insertion sort of an array
of n elements is proportional to n2
/4
 Discarding constants, we find that insertion sort is O(n2
)
Merge sort
30 24 7 12 14 4 20 21 33 38 10 55 9 23 28 16
33 38 10 55 9 23 28 1630 24 7 12 14 4 20 21
Split the array into
two or more parts
Sort each part individually
4 7 12 14 20 21 24 30 9 10 16 23 28 33 38 55
Merge
4 7 9 10 12 14 16 20 21 23 24 28 30 33 38 55
Why merge sort?
 Merge sort isn’t an “in place” sort—it requires extra
storage
 However, it doesn’t require this storage “all at once”
 This means you can use merge sort to sort something
that doesn’t fit in memory—say, 300 million census
records—then much of the data must be kept on backup
media, such as a hard drive
 Merge sort is a good way to do this
15
Using merge sort for large data sets
 Very roughly, here’s how to sort large amounts of data:
 Repeat:

Read in as much data as fits in memory

Sort it, using a fast sorting algorithm (quicksort may be a good choice)

Write out the sorted data to a new file
 After all the data has been written into smaller, individually
sorted files:

Read in the initial portion of each sorted file into individual arrays

Start merging the arrays

Whenever an array becomes empty, read in more data from its file

Every so often, write the destination array to the (one) final output file
 When you are done, you will have one (large) sorted
file
16
17
Summary
 Most of the sorting techniques we have discussed are O(n2
)
 As we will see later, we can do much better than this with somewhat
more complicated sorting algorithms
 Within O(n2
),
 Bubble sort is very slow, and should probably never be used for anything
 Selection sort is intermediate in speed
 Insertion sort is usually faster than selection sort—in fact, for small arrays
(say, 10 or 20 elements), insertion sort is faster than more complicated
sorting algorithms

Merge sort, if done in memory, is O(n log n)
 Selection sort and insertion sort are “good enough” for small arrays
 Merge sort is good for sorting data that doesn’t fit in main memory
18
The End

More Related Content

What's hot (20)

PPTX
Fourier transforms of discrete signals (DSP) 5
HIMANSHU DIWAKAR
 
PPTX
The theory of concurrent programming for a seasoned programmer
Roman Elizarov
 
PPTX
Inter thread communication &amp; runnable interface
keval_thummar
 
PPTX
Fundamental concurrent programming
Dimas Prawira
 
PPTX
Determination of DTFT | Computer Science
Transweb Global Inc
 
PDF
Java Concurrency Gotchas
Alex Miller
 
PDF
DSP_FOEHU - MATLAB 03 - The z-Transform
Amr E. Mohamed
 
PDF
Skiena algorithm 2007 lecture09 linear sorting
zukun
 
PPT
Thread
Juhi Kumari
 
PPTX
Effective java - concurrency
feng lee
 
PPT
3.9 external sorting
Krish_ver2
 
PDF
Python multithreaded programming
Learnbay Datascience
 
PPT
Threads in Java
Gaurav Aggarwal
 
PPT
Synchronization.37
myrajendra
 
PDF
A Survey of Adaptive QuickSort Algorithms
CSCJournals
 
PPTX
Chap3 multi threaded programming
raksharao
 
PDF
Lec3
bsnl007
 
PPTX
Multithreading in Java
Jayant Dalvi
 
PPT
Threads in java
mukesh singh
 
PDF
Lec5
bsnl007
 
Fourier transforms of discrete signals (DSP) 5
HIMANSHU DIWAKAR
 
The theory of concurrent programming for a seasoned programmer
Roman Elizarov
 
Inter thread communication &amp; runnable interface
keval_thummar
 
Fundamental concurrent programming
Dimas Prawira
 
Determination of DTFT | Computer Science
Transweb Global Inc
 
Java Concurrency Gotchas
Alex Miller
 
DSP_FOEHU - MATLAB 03 - The z-Transform
Amr E. Mohamed
 
Skiena algorithm 2007 lecture09 linear sorting
zukun
 
Thread
Juhi Kumari
 
Effective java - concurrency
feng lee
 
3.9 external sorting
Krish_ver2
 
Python multithreaded programming
Learnbay Datascience
 
Threads in Java
Gaurav Aggarwal
 
Synchronization.37
myrajendra
 
A Survey of Adaptive QuickSort Algorithms
CSCJournals
 
Chap3 multi threaded programming
raksharao
 
Lec3
bsnl007
 
Multithreading in Java
Jayant Dalvi
 
Threads in java
mukesh singh
 
Lec5
bsnl007
 

Viewers also liked (20)

KEY
History of Creationism, Parts II & III
John Lynch
 
PPT
Chap04alg
Munkhchimeg
 
PDF
A history of science (volume 1)
Dipoceanov Esrever
 
PPT
Tri Merge Sorting Algorithm
Ashim Sikder
 
PPTX
Why Ben Stein Is Wrong About History & Science
John Lynch
 
PPT
Introduction to Information Technology ch 01_b
Shahi Raz Akhtar
 
PPTX
Was There A Darwinian Revolution
John Lynch
 
PPTX
Google Algorithm Change History - 2k14-2k16.
Saba SEO
 
PPTX
How We Got Where We Are: 40 Years of Planning...
American Astronautical Society
 
PPTX
History of Google Local from 2004-2011
Mike Blumenthal
 
KEY
Introduction to "Origins, Evolution & Creation"
John Lynch
 
KEY
Ancient Ideas of Creation & Evolution
John Lynch
 
PPS
Ds 4
Niit Care
 
PPT
Dc parent 14 2
mtaft
 
PPTX
Chapter one
mihiretu kassaye
 
PPT
Introduction to Information Technology ch 02_a
Shahi Raz Akhtar
 
PPT
sPen Data Management
Uladzimir Slabin
 
KEY
One Long Argument
John Lynch
 
PPTX
National Air And Space Museum Washington DC
Shivakumar Patil
 
PPT
Google
vibhabehl
 
History of Creationism, Parts II & III
John Lynch
 
Chap04alg
Munkhchimeg
 
A history of science (volume 1)
Dipoceanov Esrever
 
Tri Merge Sorting Algorithm
Ashim Sikder
 
Why Ben Stein Is Wrong About History & Science
John Lynch
 
Introduction to Information Technology ch 01_b
Shahi Raz Akhtar
 
Was There A Darwinian Revolution
John Lynch
 
Google Algorithm Change History - 2k14-2k16.
Saba SEO
 
How We Got Where We Are: 40 Years of Planning...
American Astronautical Society
 
History of Google Local from 2004-2011
Mike Blumenthal
 
Introduction to "Origins, Evolution & Creation"
John Lynch
 
Ancient Ideas of Creation & Evolution
John Lynch
 
Ds 4
Niit Care
 
Dc parent 14 2
mtaft
 
Chapter one
mihiretu kassaye
 
Introduction to Information Technology ch 02_a
Shahi Raz Akhtar
 
sPen Data Management
Uladzimir Slabin
 
One Long Argument
John Lynch
 
National Air And Space Museum Washington DC
Shivakumar Patil
 
Google
vibhabehl
 
Ad

Similar to simple-sorting algorithms (20)

PPT
Sorting Algorithms.
Saket Kumar
 
PPTX
Unit vii sorting
Tribhuvan University
 
PPTX
Chapter-2.pptx
selemonGamo
 
PPT
Sorting algorithums > Data Structures & Algorithums
Ain-ul-Moiz Khawaja
 
PPTX
Searching and sorting Techniques in Data structures
PRIANKA R
 
PDF
Sorting
Gopi Saiteja
 
PDF
Sorting and Hashing Algorithm full pdfs.
NikhilSoni177492
 
PPTX
Sorting pnk
pinakspatel
 
PPTX
Basic Sorting algorithms csharp
Micheal Ogundero
 
PPTX
Lec 03 - Sorting.pptx
Dr. Shaukat Wasi
 
PPTX
Unit 7 sorting
Dabbal Singh Mahara
 
PPTX
sorting-160810203705.pptx
AnSHiKa187943
 
PPT
07-sorting.ppt for insertion sort and bubble sorting technquies
shalinishankar0221
 
PDF
L 14-ct1120
Zia Ush Shamszaman
 
PPT
Decimal Long Double Double Double. Represents double-precision floating-point...
Anwar Patel
 
PPT
Insertion sort bubble sort selection sort
Ummar Hayat
 
PPTX
Data structure.pptx
SajalFayyaz
 
PPT
InsertionSortBubbleSortSelectionSort.ppt
shalinishankar0221
 
PPT
Sorting algorithms
CHANDAN KUMAR
 
PPT
358 33 powerpoint-slides_14-sorting_chapter-14
sumitbardhan
 
Sorting Algorithms.
Saket Kumar
 
Unit vii sorting
Tribhuvan University
 
Chapter-2.pptx
selemonGamo
 
Sorting algorithums > Data Structures & Algorithums
Ain-ul-Moiz Khawaja
 
Searching and sorting Techniques in Data structures
PRIANKA R
 
Sorting
Gopi Saiteja
 
Sorting and Hashing Algorithm full pdfs.
NikhilSoni177492
 
Sorting pnk
pinakspatel
 
Basic Sorting algorithms csharp
Micheal Ogundero
 
Lec 03 - Sorting.pptx
Dr. Shaukat Wasi
 
Unit 7 sorting
Dabbal Singh Mahara
 
sorting-160810203705.pptx
AnSHiKa187943
 
07-sorting.ppt for insertion sort and bubble sorting technquies
shalinishankar0221
 
L 14-ct1120
Zia Ush Shamszaman
 
Decimal Long Double Double Double. Represents double-precision floating-point...
Anwar Patel
 
Insertion sort bubble sort selection sort
Ummar Hayat
 
Data structure.pptx
SajalFayyaz
 
InsertionSortBubbleSortSelectionSort.ppt
shalinishankar0221
 
Sorting algorithms
CHANDAN KUMAR
 
358 33 powerpoint-slides_14-sorting_chapter-14
sumitbardhan
 
Ad

Recently uploaded (20)

PPTX
Element 7. CHEMICAL AND BIOLOGICAL AGENT.pptx
merrandomohandas
 
PDF
Viol_Alessandro_Presentazione_prelaurea.pdf
dsecqyvhbowrzxshhf
 
PDF
Reasons for the succes of MENARD PRESSUREMETER.pdf
majdiamz
 
PPTX
Mechanical Design of shell and tube heat exchangers as per ASME Sec VIII Divi...
shahveer210504
 
PPTX
Introduction to Design of Machine Elements
PradeepKumarS27
 
PPTX
Server Side Web Development Unit 1 of Nodejs.pptx
sneha852132
 
PPTX
fatigue in aircraft structures-221113192308-0ad6dc8c.pptx
aviatecofficial
 
PDF
AI TECHNIQUES FOR IDENTIFYING ALTERATIONS IN THE HUMAN GUT MICROBIOME IN MULT...
vidyalalltv1
 
PPTX
MobileComputingMANET2023 MobileComputingMANET2023.pptx
masterfake98765
 
PPTX
artificial intelligence applications in Geomatics
NawrasShatnawi1
 
PPTX
GitOps_Without_K8s_Training_detailed git repository
DanialHabibi2
 
PDF
Ethics and Trustworthy AI in Healthcare – Governing Sensitive Data, Profiling...
AlqualsaDIResearchGr
 
PPTX
Green Building & Energy Conservation ppt
Sagar Sarangi
 
PPTX
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
PPTX
Day2 B2 Best.pptx
helenjenefa1
 
PPTX
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
PPTX
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
PDF
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 
PPTX
Element 11. ELECTRICITY safety and hazards
merrandomohandas
 
PPTX
Shinkawa Proposal to meet Vibration API670.pptx
AchmadBashori2
 
Element 7. CHEMICAL AND BIOLOGICAL AGENT.pptx
merrandomohandas
 
Viol_Alessandro_Presentazione_prelaurea.pdf
dsecqyvhbowrzxshhf
 
Reasons for the succes of MENARD PRESSUREMETER.pdf
majdiamz
 
Mechanical Design of shell and tube heat exchangers as per ASME Sec VIII Divi...
shahveer210504
 
Introduction to Design of Machine Elements
PradeepKumarS27
 
Server Side Web Development Unit 1 of Nodejs.pptx
sneha852132
 
fatigue in aircraft structures-221113192308-0ad6dc8c.pptx
aviatecofficial
 
AI TECHNIQUES FOR IDENTIFYING ALTERATIONS IN THE HUMAN GUT MICROBIOME IN MULT...
vidyalalltv1
 
MobileComputingMANET2023 MobileComputingMANET2023.pptx
masterfake98765
 
artificial intelligence applications in Geomatics
NawrasShatnawi1
 
GitOps_Without_K8s_Training_detailed git repository
DanialHabibi2
 
Ethics and Trustworthy AI in Healthcare – Governing Sensitive Data, Profiling...
AlqualsaDIResearchGr
 
Green Building & Energy Conservation ppt
Sagar Sarangi
 
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
Day2 B2 Best.pptx
helenjenefa1
 
DATA BASE MANAGEMENT AND RELATIONAL DATA
gomathisankariv2
 
美国电子版毕业证南卡罗莱纳大学上州分校水印成绩单USC学费发票定做学位证书编号怎么查
Taqyea
 
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 
Element 11. ELECTRICITY safety and hazards
merrandomohandas
 
Shinkawa Proposal to meet Vibration API670.pptx
AchmadBashori2
 

simple-sorting algorithms

  • 2. 2 Bubble sort  Compare each element (except the last one) with its neighbor to the right  If they are out of order, swap them  This puts the largest element at the very end  The last element is now in the correct and final place  Compare each element (except the last two) with its neighbor to the right  If they are out of order, swap them  This puts the second largest element next to last  The last two elements are now in their correct and final places  Compare each element (except the last three) with its neighbor to the right  Continue as above until you have no unsorted elements on the left
  • 3. 3 Example of bubble sort 7 2 8 5 4 2 7 8 5 4 2 7 8 5 4 2 7 5 8 4 2 7 5 4 8 2 7 5 4 8 2 5 7 4 8 2 5 4 7 8 2 7 5 4 8 2 5 4 7 8 2 4 5 7 8 2 5 4 7 8 2 4 5 7 8 2 4 5 7 8 (done)
  • 4. 4 Code for bubble sort  public static void bubbleSort(int[] a) { int outer, inner; for (outer = a.length - 1; outer > 0; outer--) { // counting down for (inner = 0; inner < outer; inner++) { // bubbling up if (a[inner] > a[inner + 1]) { // if out of order... int temp = a[inner]; // ...then swap a[inner] = a[inner + 1]; a[inner + 1] = temp; } } } }
  • 5. 5 Analysis of bubble sort  for (outer = a.length - 1; outer > 0; outer--) { for (inner = 0; inner < outer; inner++) { if (a[inner] > a[inner + 1]) { // code for swap omitted } } }  Let n = a.length = size of the array  The outer loop is executed n-1 times (call it n, that’s close enough)  Each time the outer loop is executed, the inner loop is executed  Inner loop executes n-1 times at first, linearly dropping to just once  On average, inner loop executes about n/2 times for each execution of the outer loop  In the inner loop, the comparison is always done (constant time), the swap might be done (also constant time)  Result is n * n/2 * k, that is, O(n2/2 + k) = O(n2 )
  • 6. 6 Loop invariants  You run a loop in order to change things  Oddly enough, what is usually most important in understanding a loop is finding an invariant: that is, a condition that doesn’t change  In bubble sort, we put the largest elements at the end, and once we put them there, we don’t move them again  The variable outer starts at the last index in the array and decreases to 0  Our invariant is: Every element to the right of outer is in the correct place  That is, for all j > outer, if i < j, then a[i] <= a[j]  When this is combined with the loop exit test, outer == 0, we know that all elements of the array are in the correct place
  • 7. 7 Selection sort  Given an array of length n,  Search elements 0 through n-1 and select the smallest  Swap it with the element in location 0  Search elements 1 through n-1 and select the smallest  Swap it with the element in location 1  Search elements 2 through n-1 and select the smallest  Swap it with the element in location 2  Search elements 3 through n-1 and select the smallest  Swap it with the element in location 3  Continue in this fashion until there’s nothing left to search
  • 8. 8 Example and analysis of selection sort  The selection sort might swap an array element with itself--this is harmless, and not worth checking for  Analysis:  The outer loop executes n-1 times  The inner loop executes about n/2 times on average (from n to 2 times)  Work done in the inner loop is constant (swap two array elements)  Time required is roughly (n-1)*(n/2)  You should recognize this as O(n2 ) 7 2 8 5 4 2 7 8 5 4 2 4 8 5 7 2 4 5 8 7 2 4 5 7 8
  • 9. 9 Code for selection sort public static void selectionSort(int[] a) { int outer, inner, min; for (outer = 0; outer < a.length - 1; outer++) { min = outer; for (inner = outer + 1; inner < a.length; inner++) { if (a[inner] < a[min]) { min = inner; } // Invariant: for all i, if outer <= i <= inner, then a[min] <= a[i] } // a[min] is least among a[outer]..a[a.length - 1] int temp = a[outer]; a[outer] = a[min]; a[min] = temp; // Invariant: for all i <= outer, if i < j then a[i] <= a[j] } }
  • 10. 10 Invariants for selection sort  For the inner loop:  This loop searches through the array, incrementing inner from its initial value of outer+1 up to a.length-1  As the loop proceeds, min is set to the index of the smallest number found so far  Our invariant is: for all i such that outer <= i <= inner, a[min] <= a[i]  For the outer (enclosing) loop:  The loop counts up from outer = 0  Each time through the loop, the minimum remaining value is put in a[outer]  Our invariant is: for all i <= outer, if i < j then a[i] <= a[j]
  • 11. 11 Insertion sort  The outer loop of insertion sort is: for (outer = 1; outer < a.length; outer++) {...}  The invariant is that all the elements to the left of outer are sorted with respect to one another  For all i < outer, j < outer, if i < j then a[i] <= a[j]  This does not mean they are all in their final correct place; the remaining array elements may need to be inserted  When we increase outer, a[outer-1] becomes to its left; we must keep the invariant true by inserting a[outer-1] into its proper place  This means:  Finding the element’s proper place  Making room for the inserted element (by shifting over other elements)  Inserting the element
  • 12. 12 One step of insertion sort 3 4 7 12 14 14 20 21 33 38 10 55 9 23 28 16 sorted next to be inserted 3 4 7 55 9 23 28 16 10 temp 3833212014141210 sorted less than 10
  • 13. 13 Analysis of insertion sort  We run once through the outer loop, inserting each of n elements; this is a factor of n  On average, there are n/2 elements already sorted  The inner loop looks at (and moves) half of these  This gives a second factor of n/4  Hence, the time required for an insertion sort of an array of n elements is proportional to n2 /4  Discarding constants, we find that insertion sort is O(n2 )
  • 14. Merge sort 30 24 7 12 14 4 20 21 33 38 10 55 9 23 28 16 33 38 10 55 9 23 28 1630 24 7 12 14 4 20 21 Split the array into two or more parts Sort each part individually 4 7 12 14 20 21 24 30 9 10 16 23 28 33 38 55 Merge 4 7 9 10 12 14 16 20 21 23 24 28 30 33 38 55
  • 15. Why merge sort?  Merge sort isn’t an “in place” sort—it requires extra storage  However, it doesn’t require this storage “all at once”  This means you can use merge sort to sort something that doesn’t fit in memory—say, 300 million census records—then much of the data must be kept on backup media, such as a hard drive  Merge sort is a good way to do this 15
  • 16. Using merge sort for large data sets  Very roughly, here’s how to sort large amounts of data:  Repeat:  Read in as much data as fits in memory  Sort it, using a fast sorting algorithm (quicksort may be a good choice)  Write out the sorted data to a new file  After all the data has been written into smaller, individually sorted files:  Read in the initial portion of each sorted file into individual arrays  Start merging the arrays  Whenever an array becomes empty, read in more data from its file  Every so often, write the destination array to the (one) final output file  When you are done, you will have one (large) sorted file 16
  • 17. 17 Summary  Most of the sorting techniques we have discussed are O(n2 )  As we will see later, we can do much better than this with somewhat more complicated sorting algorithms  Within O(n2 ),  Bubble sort is very slow, and should probably never be used for anything  Selection sort is intermediate in speed  Insertion sort is usually faster than selection sort—in fact, for small arrays (say, 10 or 20 elements), insertion sort is faster than more complicated sorting algorithms  Merge sort, if done in memory, is O(n log n)  Selection sort and insertion sort are “good enough” for small arrays  Merge sort is good for sorting data that doesn’t fit in main memory