1 / 11

Chapter 7: Sorting A lgorithms

Mark Allen Weiss: Data Structures and Algorithm Analysis in Java. Chapter 7: Sorting A lgorithms. Shell Sort. Lydia Sinapova, Simpson College. Shell Sort. Improves on insertion sort Compares elements far apart , then less far apart , finally compares adjacent elements

kennita
Download Presentation

Chapter 7: Sorting A lgorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mark Allen Weiss: Data Structures and Algorithm Analysis in Java Chapter 7: Sorting Algorithms Shell Sort Lydia Sinapova, Simpson College

  2. Shell Sort • Improves on insertion sort • Compares elementsfar apart, thenless far apart, finally comparesadjacentelements (as an insertion sort).

  3. Idea • arrange the data sequence in atwo-dimensional array • sort the columnsof the array • repeatthe process each time withsmaller number of columns

  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. Example (cont) 3 3 2 0 0 1 0 5 1 1 2 2 5 7 4 3 3 4 4 0 6 4 5 6 1 6 8 5 6 8 7 9 9 7 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. Implementation • one-dimensional array that is • indexed appropriately. • an increment sequence • to determine how far apart elements to be sorted are

  7. Increment sequence Determines how far apart elements to be sorted are: h1, h2, ..., ht with h1 = 1 hk-sorted array - all elements spaced a distance hkapart are sorted relative to each other.

  8. Correctness of the algorithm Shellsort only works because an array that is hk-sorted remains hk-sorted when hk- 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. 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. Increment sequences 1. Shell's original sequence: N/2 , N/4 , ..., 1 (repeatedly divide by 2). 2. Hibbard's increments: 1, 3, 7, ..., 2k - 1 ; 3. Knuth's increments: 1, 4, 13, ..., ( 3k - 1) / 2 ; 4. Sedgewick's increments: 1, 5, 19, 41, 109, .... 9 ·4k - 9 ·2k + 1 or 4k - 3 ·2k + 1.

  11. Analysis Shellsort's worst-case performance using Hibbard's increments is Θ(n3/2).  The averageperformance 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.

More Related