Sorting - Iterative Algorithms
Sorting - Iterative Algorithms
Sorting Algorithms
Problem Definition
Input: A sequence of n elements <a1, a2, , an> Output: A permutation <a1, a2, , an> of such elements, so that a1 a2 an
Advanced Programming
Sorting Algorithms
Types of Ordering
Internal
Ordering
All the elements to be ordered are in main memory Direct access to all elements
External
Ordering
Elements cannot be loaded all in memory at the same time It is necessary to act on elements stored on a file Usually, sequential access
3
Practical observations
Elements
The
key of such structure is usually one field (or a value calculated from one or more fields) Remaining fields are additional data but useless for ordering Ordering is made for increasing values of the key
4
Advanced Programming
Sorting Algorithms
Example
struct student { int id; char surname[30] ; char name[30] ; int grade; } ;
struct student class[100] ;
5
Example
struct student { int id; char surname[30] ; Ordering by name char name[30] ; and surname (key = concatenation int grade; name and surname) } ; Ordering by grade(
repeated values) Ordering by id
Advanced Programming
Sorting Algorithms
Stability
A sorting algorithm is called stable whenever, even if there are elements with the same value of the key, in the resulting sequence such elements appear in the same order in which they appeared in the initial sequence.
Simple Assumption
During the study of sorting algorithms there are usually arrays of n integer values: int A[n] ;
Advanced Programming
Sorting Algorithms
Algorithms
There are many sorting algorithms with different complexity: O(n2): simple, iterative
O(n):
O(n
Insertion sort
Already sorted v[j] 2 3 6 12 16 21 8 Move forward all the elements so that v[ I ] > v[ j ] 2 3 6 8 12 16 21 Not considered yet
12 16 21
5
10
Advanced Programming
Sorting Algorithms
Pseudo-code
11
Implementation in C
void InsertionSort(int A[], int n) { int i, j, key ; for(j=1; j<n; j++) { key = A[j] ; i = j - 1 ; while ( i >= 0 && A[i]>key ) { A[i+1] = A[i] ; i-- ; } A[i+1] = key ; } }
12
Advanced Programming
Sorting Algorithms
From pseudo-code to C
Note well: In C, array indexes are from 0 to n-1, while pseudo-code use ranges from 1 to n. Indentation of code is useful but remember braces to identify blocks { }
13
Complexity
Number of comparisons: Cmin = n-1 Cavg = (n2+n-2) Cmax = (n2+n)-1 Number of data-copies Mmin = 2(n-1) Mavg = (n2+9n-10) Mmax = (n2+3n-4) C = O(n2), M = O(n2) T(n) = O(n2) T(n) non Tworst case(n) = (n2) (n2)
14
Best case: array already ordered Worst case: array ordered inversely
Advanced Programming
Sorting Algorithms
15
Random
Inversely Ordered
n = 256
512
256
512
256
512
16
Advanced Programming
Sorting Algorithms
Impact of data
n = 256
17
Counting sort
It cannot be applied in general, as it is based on this hypothesis: The n elements to be ordered are integer numbers between 1 and k, with k integer. With such hypothesis, if k = O(n), then the algorithms complexity is just O(n).
18
Advanced Programming
Sorting Algorithms
Basic Idea
Find out, for each element x, how many elements of the array are less than x. Such information allows to put x directly in the final position in the array
19
Data Structure
Three
C keeps track of number of elements of A having a certain value: C[i] is the number of elements of A equals to i. Sum of the first i elements of C defines the number of elements of A whose values is <= i
20
10
Advanced Programming
Sorting Algorithms
Pseudo-code
21
Analysis
For each j, C[ A[j] ] represents the number of elements less than or equals to A[j], and then it is the final position of A[j] in B: B[ C[ A[j] ] ] = A[j] The correction C[ A[j] ] C[ A[j] ] 1 is needed to handle duplicate elements.
22
11
Advanced Programming
Sorting Algorithms
23
Example (2)
A B B B B B B B B 1 1 1 1 1 1 1 1 1 3 3 3 6 4 1 3 4 1 4 4 4 4 4 4 4 4 4 C C C C C C C C 2 2 4 6 7 8 1 2 4 6 7 8 1 2 4 5 7 8 1 2 3 5 7 8 0 2 3 5 7 8 0 2 3 4 7 8 0 2 3 4 7 7 0 2 2 4 7 7
j=8
j=7 j=6
j=5 j=4
j=3 j=2 j=1
24
3 4 4 4 3 4 4 4 6
1 1 3 3 4 4 4 6
12
Advanced Programming
Sorting Algorithms
Complexity
Initialization of C: O(k) 3-4: Calculate C: O(n) 6-7: Sum in C: O(k) 9-11: Copy in B: O(n) Total complexity is O(n+k). Algorithm is useful only when k=O(n), because the resulting complexity is O(n).
1-2:
25
Note
The condition of applicability of the algorithm can be extended in this way: The key field of n elements to be ordered has a limited number of possible values k.
26
13
Advanced Programming
Sorting Algorithms
Bubble Sort
In
each cycle compare every couple of consecutive elements and if they are not ordered, then swap (exchange) them. Repeat this process N times and all the elements will be ordered Complexity is O(n2) Optimization: if during last cycle there are no swaps, then the elements are already sorted
27
Bubble sort in C
void BubbleSort(int A[], int n) { int i, j, t; for(i=1; i<n-1; i++) { for(j=1; j<n-1; j++) { if ( A[j]>A[j+1] ) { t = A[j] ; A[j] = A[j+1]; A[j+1] = t; } } } }
28
14
Advanced Programming
Sorting Algorithms
15