Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 6: Transform and Conquer Shell Sort The Design and Analysis of Algorithms.

Similar presentations


Presentation on theme: "Chapter 6: Transform and Conquer Shell Sort The Design and Analysis of Algorithms."— Presentation transcript:

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


Download ppt "Chapter 6: Transform and Conquer Shell Sort The Design and Analysis of Algorithms."

Similar presentations


Ads by Google