0% found this document useful (0 votes)
15 views41 pages

Chapter 3

Chapter Three discusses simple sorting and searching algorithms, emphasizing their importance in computer systems. It covers two searching algorithms (Sequential and Binary Search) and four sorting algorithms (Bubble, Selection, Insertion, and Simple Sort), detailing their implementations and complexity analyses. The chapter highlights the efficiency and use cases of each algorithm, noting that sorting is fundamental to more complex operations in computer science.

Uploaded by

habtaassefa0
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views41 pages

Chapter 3

Chapter Three discusses simple sorting and searching algorithms, emphasizing their importance in computer systems. It covers two searching algorithms (Sequential and Binary Search) and four sorting algorithms (Bubble, Selection, Insertion, and Simple Sort), detailing their implementations and complexity analyses. The chapter highlights the efficiency and use cases of each algorithm, noting that sorting is fundamental to more complex operations in computer science.

Uploaded by

habtaassefa0
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 41

Chapter Three

Simple Sorting and Searching


Algorithms

1
Why do we study sorting and searching
algorithms?
• These algorithms are the most common and useful
tasks operated by computer system.

• Computers spend a lot of time searching and sorting.

1. Simple Searching algorithms

Searching:- is a process of finding an element in a


list of items or determining that the item is not in the
list.
2
• To keep things simple, we shall deal with a list of
numbers.

• A search method looks for a key, arrives by


parameter.

• By convention, the method will return the index of


the element corresponding to the key or, if
unsuccessful, the value -1.

3
• There are two simple searching algorithms:
a) Sequential Search, and
b) Binary Search

a). Sequential Searching (Linear)


• The most natural way of searching an item.
• Easy to understand and implement.

4
Algorithm:

• In a linear search, we start with top (beginning) of


the list, and compare the element at top with the key.

• If we have a match, the search terminates and the


index number is returned.

• If not, we go on the next element in the list.

• If we reach the end of the list without finding a


match, we return -1.

5
Implementation:

• Assume the size of the list is n.

int LinearSearch(int list[ ], int key)


{
index=-1;
for(int i=0; i<n; i++)
{
if(list[i]==key)
{
index=i;
break;
}
}
return index;
}

6
Complexity Analysis:

• Big-Oh of sequential searching  How


many comparisons are made in the
worst case ? n
• O(n).

b). Binary Searching

• Assume sorted data.


• Use Divide and conquer strategy
(approach).
7
Algorithm:

I. In a binary search, we look for the key in the


middle of the list. If we get a match, the search is
over.

II. If the key is greater than the element in the middle


of the list, we make the top (upper) half the list to
search.

III. If the key is smaller, we make the bottom (lower)


half the list to search.

8
• Repeat the above steps (I,II and III) until one
element remains.

• If this element matches return the index of the


element, else return -1 index. (-1 shows that the
key is not in the list).

9
Implementation: if(found==0)
int BinarySearch(int list[ ], int key)index=-1;
{ else
int found=0,index=0; index=middle;
int top=n-1,bottom=0,middle;return index;
do{ }
middle=(top + bottom)/2;
if(key==list[middle])
found=1; Complexity Analysis:
else{
if(key<list[middle]) Example: Find Big-Oh
top=middle-1; of Binary search
else algorithm in the worst
bottom=middle+1; case analysis.
}
}
}while(found==0 && top>=bottom);

10
2. Simple Sorting Algorithms

• Sorting: is a process of reordering a list of items in


either increasing or decreasing order.
• Ordering a list of items is fundamental problem of
computer science.
• Sorting is the most important operation performed
by computers.
• Sorting is the first step in more complex algorithms.

Two basic properties of sorting algorithms:


In-place:
It is possible to sort very large lists without the need to
allocate additional working storage.
11
Simple Sorting Algorithms

Stable:
If two elements that are equal remain in the same
relative position after sorting is completed.

Two classes of sorting algorithms:


O(n2):
• Includes the bubble, insertion, and selection sorting
algorithms.
O(nlog n):
• Includes the heap, merge, and quick sorting
algorithms.

12
Simple Sorting Algorithms

• Simple sorting algorithms include:


i. Simple sorting
ii. Bubble Sorting
iii. Selection Sorting
iv. Insertion Sorting

13
I. Simple sorting
Algorithm:
• In simple sort algorithm the first
element is compared with the second,
third and all subsequent elements.
• If any one of the other elements is less
than the current first element then the
first element is swapped with that
element.
• Eventually, after the last element of the
list is considered and swapped, then the
first element has the smallest element
in the list.
• The above steps are repeated with the 14
Implementation:
Void SimpleSort(int list[])
{
for(int i=0; i<=n-2;i++)
for(int j=i+1; j<=n-1; j++)
if(list[i] > list[j])
{
int temp;
temp=list[i];
list[i]=list[j];
list[j]=temp;
}
}
15
`

0 1 2
Example: n-1
--------
i
j
4 2 3 1
i=0 j=1 2 4 3 1
j=2 2 4 3 1
j=3 1 4 3 2
i=1 j=2 1 3 4 2
j=3 1 2 4 3
i=2 j=3 1 2 3 4
16
`

Analysis: O(?)
1st pass----- (n-1) comparisons
2nd pass---- (n-2) comparisons
|
|
|
(n-1)th pass--- 1 comparison

T(n)=1+2+3+4+-------+(n-2)+(n-1)
= (n*(n-1))/2
=n2/2-n/2
=O(n2)

17
Complexity Analysis:

• Analysis involves number of


comparisons and swaps.

• How many comparisons?


1+2+3+…+(n-1)= O(n2)
• How many swaps?
1+2+3+…+(n-1)= O(n2)

18
Example: Suppose we have 32 unsorted data.
a). How many comparisons are made by sequential
search in the worst-case?
 Number of comparisons =32.
b). How many comparisons are made by binary
search in the worst-case? (Assuming simple
sorting).
 Number of comparisons = Number of
comparisons for sorting + Number of comparisons
for binary search
= (n*(n-1))/2 + logn
= 32/2(32-1)+ log 32
=16*31 + 5
c). How many comparisons are made by binary
search in the worst-case if data is found to be
already sorted? 19
II. Bubble sort
Algorithm:
III. 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
II. 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 before last
 The last two elements are now in their correct and final
places

20
III. Compare each element (except the last three)
with its neighbor to the right.
IV. Continue as above until you have no unsorted
elements on the left.
• Is the oldest, simplest, and slowest sort in use.
• It works by comparing each item in a list with
an item next to it, and swap them if required.
• This causes the larger values to “bubble” to the
end of the list while smaller values to “sink”
towards the beginning of the list.
• In general case, bubble sort has O(n2) level of
complexity.

21
Advantage:
• Simplicity and ease of implementation.
Disadvantage:
• Horribly inefficient.

22
`
Example of Bubble sort
4 2 3 1
i=3 j=1 2 4 3 1
j=2 2 3 4 1
j=3 2 3 1 4
i=2 j=1 2 3 1 4
j=2 2 1 3 4
i=1 j=1 1 2 3 4

23
Another Example of Bubble sort

72854 27548 25478 24578


27854 27548 25478 24578
27854 25748 24578 (done)
27584 25478

27548

24
Implementation:

Void BubbleSort(int list[ ])


{ int temp;
for (int i=n-2; i>=0; i--) {
for(int j=0;j<=i; j++)
if (list[j] > list[j+1]) {
temp=list[j];
list[j])=list[j+1];
list[j+1]=temp;
}
}
} 25
Complexity Analysis:

• Analysis involves number of comparisons


and swaps.

• How many comparisons?


1+2+3+…+(n-1)= O(n2)

• How many swaps?


1+2+3+…+(n-1)= O(n2)

26
III. Selection Sort
Algorithm

• The selection sort algorithm is in many ways


similar to simple sort algorithms.
• The idea of algorithm is quite simple. Array is
imaginary divided into two parts - sorted one and
unsorted one.
• At the beginning, sorted part is empty, while
unsorted one contains whole array.
• At every step, algorithm finds minimal element in the
unsorted part and adds it to the end of the sorted one.
• When unsorted part becomes empty, algorithm stops.

27
• Works by selecting the smallest unsorted item
remaining in the list, and then swapping it with
the item in the next position to be filled.
• Similar to the more efficient insertion sort.
• It yields a 60% performance improvement
over the bubble sort.
Advantage:
• Simple and easy to implement.
Disadvantage:
• Inefficient for larger lists.

28
Selection Sort Example:
7 9 11 3
i=0 j=1 7 9 11 3
j=2 7 9 11 3
j=3 3 9 11 7
i=1 j=2 3 9 11 7
j=3 3 7 11 9
i=2 j=3 3 7 9 11

29
30
Implementation:
void selectionSort(int list[ ] ) {
int minIndex, temp;
for (int i = 0; i <= n - 2; i++) {
minIndex = i;
for (j = i + 1; j <= n-1; j++)
if (list[j] < list[minIndex])
minIndex = j;
if (minIndex != i) {
temp = list[i];
list[i] = list[minIndex];
list[minIndex] = temp;
}
}
31
}
Complexity Analysis

• Selection sort stops, when unsorted part becomes


empty.

• As we know, on every step number of unsorted


elements decreased by one.

• Therefore, selection sort makes n-1 steps (n is


number of elements in array) of outer loop, before
stop.

• Every step of outer loop requires finding minimum


in unsorted part. Summing up, (n - 1) + (n - 2) + ... +
1, results in O(n2) number of comparisons.
32
• Number of swaps may vary from zero (in case of
sorted array) to n-1 (in case array was sorted in
reversed order), which results in O(n) number of
swaps.

• Overall algorithm complexity is O(n2).

• Fact, that selection sort requires n-1 number of


swaps at most, makes it very efficient in situations,
when write operation is significantly more expensive,
than read operation.

33
IV. Insertion Sort
Algorithm:
• Insertion sort algorithm somewhat resembles Selection
Sort and Bubble sort.
• Array is imaginary divided into two parts - sorted one
and unsorted one.

• At the beginning, sorted part contains first element of


the array and unsorted one contains the rest.

• At every step, algorithm takes first element in the


unsorted part and inserts it to the right place of the
sorted one.

• When unsorted part becomes empty, algorithm stops.


34
Using binary search

• It is reasonable to use binary search algorithm to


find a proper place for insertion.

• This variant of the insertion sort is called binary


insertion sort.

• After position for insertion is found, algorithm shifts


the part of the array and inserts the element.

35
• Insertion sort works by inserting item into its proper place in
the list.
• Insertion sort is simply like playing cards: To sort the cards in
your hand, you extract a card, shift the remaining cards and
then insert the extracted card in the correct place.
• This process is repeated until all the cards are in the correct
sequence.
• Is over twice as fast as the bubble sort and is just as easy to
implement as the selection sort.
Advantage:
• Relatively simple and easy to implement.
Disadvantage:
• Inefficient for large lists.

36
4 4 3

3 4 4
2 2 2 2
1 1 1 1

3 3 2
3
4 4 3
4
2 4
1
1 1 1
37
2 2 1

3 3 2 2
4 4 3 3
1 4 4

38
39
C++ implementation

void InsertionSort(int list[])


{
for (int i = 1; i <= n-1; i++) {
for(int j = i;j>=1; j--) {
if(list[j-1] > list[j])
{
int temp = list[j];
list[j] = list[j-1];
list[j-1] = temp;
}
else
break;
}
}
}
40
Complexity Analysis

• The complexity of insertion sorting is O(n) at best case


of an already sorted array and O(n2) at worst case,
regardless of the method of insertion.

• Number of comparisons may vary depending on the


insertion algorithm.

 O(n2) for shifting or swapping methods.


 O(nlogn) for binary insertion sort.

41

You might also like