Download presentation
Presentation is loading. Please wait.
Published byJoanna Flowers Modified over 8 years ago
1
Chapter 6: Transform and Conquer Shell Sort The Design and Analysis of Algorithms
2
2 Shell Sort Improves on insertion sort Compares elements far apart, then less far apart, finally compares adjacent elements (as an insertion sort).
3
3 Idea arrange the data sequence in a two-dimensional array sort the columns of the array repeat the process each time with smaller number of columns
4
4 Example 3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2 it is arranged in an array with 7 columns (left), then the columns are sorted (right): 3 7 9 0 5 1 6 3 3 2 0 5 1 5 8 4 2 0 6 1 5 7 4 4 0 6 1 6 7 3 4 9 8 2 8 7 9 9 8 2
5
5 Example (cont) 3 3 20 0 1 0 5 11 2 2 5 7 43 3 4 4 0 6 4 5 6 1 6 85 6 8 7 9 97 7 9 8 2 8 9 one column in the last step – it is only a 6, an 8 and a 9 that have to move a little bit to their correct position
6
6 Implementation one-dimensional array indexed appropriately. an increment sequence to determine how far apart elements to be sorted are
7
7 Increment sequence Determines how far apart elements to be sorted are: h 1, h 2,..., h t with h 1 = 1 h k -sorted array - all elements spaced a distance h k apart are sorted relative to each other.
8
8 Correctness of the algorithm Shellsort only works because an array that is h k -sorted remains h k -sorted when h k- 1 -sorted. Subsequent sorts do not undo the work done by previous phases. The last step (with h = 1) - Insertion Sort on the whole array
9
9 Java code for Shell sort int j, p, gap; comparable tmp; for (gap = N/2; gap > 0; gap = gap/2) for ( p = gap; p < N ; p++) { tmp = a[p]; for ( j = p ; j >= gap && tmp < a[ j- gap ]; j = j - gap) a[ j ] = a[ j - gap ]; a[j] = tmp; }
10
10 Increment sequences 1. Shell's original sequence: N/2, N/4,..., 1 (repeatedly divide by 2). 2. Hibbard's increments: 1, 3, 7,..., 2 k - 1 ; k = 1, 2, … 3. Knuth's increments: 1, 4, 13,..., ( 3 k - 1) / 2 ; k = 1, 2, … 4. Sedgewick's increments: 1, 5, 19, 41, 109,.... k = 0, 1, 2, … Interleaving 9 (4 k – 2 k ) + 1 and 2 k+2 (2 k+2 – 3 ) + 1.
11
11 Analysis Shellsort's worst-case performance using Hibbard's increments is Θ(n 3/2 ). The average performance is thought to be about O(n 5/4 ) The exact complexity of this algorithm is still being debated for mid-sized data : nearly as well if not better than the faster (n log n) sorts. Animations: http://www.sorting-algorithms.com/shell-sort http://www.cs.pitt.edu/~kirk/cs1501/animations/Sort2.html
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.