Schoolboek-Data Structures and Algorithms in Java
Schoolboek-Data Structures and Algorithms in Java
Advanced Sorting
Daw Su Su Win
Lecturer
Although compare elements that are adjacent in insertion sort, shell sort compare
elements with are a distant part.
Uses incremental i, sometimes called the gap or interval to create a sub-list.
In each pass, the value of gap till reaching the last pass when a gap is 1.
Consider the following unsorted array with elements 15, 17, 20, 35, 25, 90, 27, 30, 11.
There are total of 9 elements, n=9
array index 0 1 2 3 4 5 6 7 8
elements 15 17 20 35 25 90 27 30 11
Find a gap,
gap = floor(n/2) for pass 1
=floor (9/2) gap= 4
=floor(4.5)
=4
University of Computer Studies, FCS 5
Shell Sort (Example) FCS
Pass 1
gap=4
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4
end
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
end
gap=4
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 35 25 90 27 30 11
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 30 25 90 27 35 11
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 30 25 90 27 35 11
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 30 11 90 27 35 25
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
15 17 20 30 11 90 27 35 25
Pass 1
gap=4 end
0 1 2 3 4 5 6 7 8
11 17 20 30 15 90 27 35 25
Pass 2
0 1 2 3 4 5 6 7 8
11 17 20 30 15 90 27 35 25
Find a gap,
gap = floor(gap/2) for pass 2
=floor (4/2) gap= 2
=floor(2)
=2
Pass 2
gap=2
sub-list 1 sub-list 2
end
0 1 2 3 4 5 6 7 8
11 17 20 30 15 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 20 30 15 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 20 30 15 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 90 27 35 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35
90 27 90 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35
90 27 90 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35
90 27 90 25
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35
90 25 90 27
Pass 2
gap=2 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35
90 25 90 27
Pass 3
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35 25 90 27
Find a gap,
gap = floor(gap/2) for pass 3
=floor (2/2) gap= 1
=floor(1)
=1
When gap =1
Shell sort is like insertion sort University of Computer Studies, FCS 33
Shell Sort (Example) FCS
Pass 3
gap=1
sub-list 1
end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 17 15 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 30 20 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 30 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 30 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 30 35 25 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 30 25 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 30 25 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 90 27
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 27 90
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 35 27 90
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 27 35 90
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 30 27 35 90
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 27 30 35 90
Pass 3
gap=1 end
0 1 2 3 4 5 6 7 8
11 15 17 20 25 27 30 35 90
Linux kernel