CPSC1103 Lecture 8
CPSC1103 Lecture 8
Searching and
Sorting Arrays
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
8.1
Introduction to Search Algorithms
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Introduction to Search
Algorithms
Search: locate an item in a list of
information
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Linear Search
Also called the sequential search
Starting at the first element, this algorithm
sequentially steps through an array
examining each element until it locates the
value it is searching for.
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Linear Search - Example
17 23 5 11 2 29 3
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Linear Search
Algorithm:
set found to false; set position to –1; set index to 0
while index < number of elts. and found is false
if list[index] is equal to search value
found = true
position = index
end if
add 1 to index
end while
return position
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
A Linear Search Function
int linearSearch(int arr[], int size, int value)
{
int index = 0; // Used as a subscript to search the array
int position = -1; // To record the position of search value
bool found = false; // Flag to indicate if value was found
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Linear Search - Tradeoffs
Benefits:
Easy algorithm to understand
Array can be in any order
Disadvantages:
Inefficient (slow): for array of N elements,
examines N/2 elements on average for value
in array, N elements for value not in array
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Binary Search
Requires array elements to be in order
1. Divides the array into three sections:
middle element
elements on one side of the middle element
elements on the other side of the middle element
2. If the middle element is the correct value, done.
Otherwise, go to step 1. using only the half of the
array that may contain the correct value.
3. Continue steps 1. and 2. until either the value is
found or there are no more elements to examine
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Binary Search - Example
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Binary Search
Set first to 0
Set last to the last subscript in the array
Set found to false
Set position to -1
While found is not true and first is less than or equal to last
Set middle to the subscript half-way between array[first] and array[last].
If array[middle] equals the desired value
Set found to true
Set position to middle
Else If array[middle] is greater than the desired value
Set last to middle - 1
Else
Set first to middle + 1
End If.
End While.
Return position.
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
A Binary Search Function
int binarySearch(int array[], int size, int value)
{
int first = 0, // First array element
last = size - 1, // Last array element
middle, // Mid point of search
position = -1; // Position of search value
bool found = false; // Flag
Disadvantages:
Requires that array elements be sorted
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
8.3
Introduction to Sorting Algorithms
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Introduction to Sorting
Algorithms
Sort: arrange values into an order:
Alphabetical
Ascending numeric
Descending numeric
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Bubble Sort
Concept:
Compare 1st two elements
If out of order, exchange them to put in order
Move down one element, compare 2nd and 3rd
elements, exchange if necessary. Continue until end
of array.
Pass through array again, exchanging as necessary
Repeat until pass made with no exchanges
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Example – First Pass
compare values
17 and 23 – in correct compare values 23 and
order, so no exchange 11 – not in correct order,
so exchange them
compare values 23 and
5 – not in correct order,
so exchange them
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Example – Second Pass
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Example – Third Pass
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
A Bubble Sort Function –
From Program 8-4
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Bubble Sort - Tradeoffs
Benefit:
Easy to understand and implement
Disadvantage:
Inefficient: slow for large arrays
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Selection Sort
Concept for sort in ascending order:
Locate smallest element in array. Exchange it
with element in position 0
Locate next smallest element in array.
Exchange it with element in position 1.
Continue until all elements are arranged in
order
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Selection Sort - Example
Array numlist contains:
11 2 29 3
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Example (Continued)
2. Next smallest element is 3. Exchange 3 with
element in 2nd position in array:
2 3 29 11
2 3 11 29
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
A Selection Sort Function –
From Program 8-5
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Selection Sort - Tradeoffs
Benefit:
More efficient than Bubble Sort, since fewer
exchanges
Disadvantage:
May not be as easy as Bubble Sort to
understand
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
8.5
Sorting and Searching Vectors
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.
Sorting and Searching Vectors
Sorting and searching algorithms can be
applied to vectors as well as arrays
Need slight modifications to functions to
use vector arguments:
vector <type> & used in prototype
No need to indicate vector size – functions
can use size member function to calculate
Copyright © 2018, 2015, 2012, 2009 Pearson Education, Inc. All rights reserved.