Download presentation

Presentation is loading. Please wait.

Published byMaximillian Heckle Modified over 2 years ago

2
§7 Quicksort -- the fastest known sorting algorithm in practice 1. The Algorithm void Quicksort ( ElementType A[ ], int N ) { if ( N < 2 ) return; pivot = pick any element in A[ ]; Partition S = { A[ ] \ pivot } into two disjoint sets: A1={ a S | a pivot } and A2={ a S | a pivot }; A = Quicksort ( A1, N1) { pivot } Quicksort ( A2, N2); } 13 81 92 43 65 31 57 26 75 0 13 81 92 43 65 31 57 26 75 0 13 43 31 57 26 0 13 43 31 57 26 0 65 81 92 75 81 92 75 0 13 26 31 43 57 65 75 81 92 0 13 26 31 43 57 65 75 81 92 The best case T(N) = O( )N log N The pivot is placed at the right place once and for all. 1/15

3
§7 Quicksort 2. Picking the Pivot A Wrong Way: Pivot = A[ 0 ] The worst case:A[ ] is presorted – quicksort will take O( N 2 ) time to do nothing A Safe Maneuver: Pivot = random select from A[ ] random number generation is expensive Median-of-Three Partitioning: Pivot = median ( left, center, right ) Eliminates the bad case for sorted input and actually reduces the running time by about 5%. 2/15

4
§7 Quicksort 3. Partitioning Strategy 8149035276592869 i j >> j << i i < i > j < i < i < > j i < Not too difficult if we carefully implement it… What if there is a key == pivot? How about stop i and j both and then swap? What will happen to the sequence: 1, 1, 1, …, 1 ? Uh-oh, there will be many dummy swaps… But hey! At least the sequence will be partitioned into two equal-sized subsequences. Good point! How about the other option – that neither i nor j stops? No swap… but then T( N ) = … Then T( N ) = O( N 2 ). So we’d better stop both i and j and take some extra swaps. 3/15

5
§7 Quicksort 4. Small Arrays Problem: Quicksort is slower than insertion sort for small N ( 20 ). Solution: Cutoff when N gets small ( e.g. N = 10 ) and use other efficient algorithms (such as insertion sort). 5. Implementation void Quicksort( ElementType A[ ], int N ) { Qsort( A, 0, N - 1 ); /* A: the array */ /* 0: Left index */ /* N – 1: Right index*/ } 4/15

6
§7 Quicksort /* Return median of Left, Center, and Right */ /* Order these and hide the pivot */ ElementType Median3( ElementType A[ ], int Left, int Right ) { int Center = ( Left + Right ) / 2; if ( A[ Left ] > A[ Center ] ) Swap( &A[ Left ], &A[ Center ] ); if ( A[ Left ] > A[ Right ] ) Swap( &A[ Left ], &A[ Right ] ); if ( A[ Center ] > A[ Right ] ) Swap( &A[ Center ], &A[ Right ] ); /* Invariant: A[ Left ] <= A[ Center ] <= A[ Right ] */ Swap( &A[ Center ], &A[ Right - 1 ] ); /* Hide pivot */ /* only need to sort A[ Left + 1 ] … A[ Right – 2 ] */ return A[ Right - 1 ]; /* Return pivot */ } 5/15

7
§7 Quicksort void Qsort( ElementType A[ ], int Left, int Right ) { int i, j; ElementType Pivot; if ( Left + Cutoff <= Right ) { /* if the sequence is not too short */ Pivot = Median3( A, Left, Right ); /* select pivot */ i = Left; j = Right – 1; /* why not set Left+1 and Right-2? */ for( ; ; ) { while ( A[ + +i ] < Pivot ) { } /* scan from left */ while ( A[ – –j ] > Pivot ) { } /* scan from right */ if ( i < j ) Swap( &A[ i ], &A[ j ] ); /* adjust partition */ else break; /* partition done */ } Swap( &A[ i ], &A[ Right - 1 ] ); /* restore pivot */ Qsort( A, Left, i - 1 ); /* recursively sort left part */ Qsort( A, i + 1, Right ); /* recursively sort right part */ } /* end if - the sequence is long */ else /* do an insertion sort on the short subarray */ InsertionSort( A + Left, Right - Left + 1 ); } 6/15

8
§7 Quicksort 6. Analysis T( N ) = T( i ) + T( N – i – 1 ) + c N The Worst Case: T( N ) = T( N – 1 ) + c NT( N ) = O( N 2 ) The Best Case: [...... ] [...... ] T( N ) = 2T( N / 2 ) + c NT( N ) = O( N log N ) The Average Case: Assume the average value of T( i ) for any i is T( N ) = O( N log N ) Home work: p.230 6.20 More analysis on Quicksort 〖 Example 〗 Given a list of N elements and an integer k. Find the kth largest element. Read Figure 6.16 on p.214 for the 5 th algorithm on solving this problem. 7/15

9
§8 Sorting Large Structures Problem: Swapping large structures can be very much expensive. Solution: Add a pointer field to the structure and swap pointers instead – indirect sorting. Physically rearrange the structures at last if it is really necessary. list key table [0] d 0 [1] b 1 [2] f 2 [3] c 3 [4] a 4 [5] e 5 table413052 The sorted list is list [ table[0] ], list [ table[1] ], ……, list [ table[n 1] ] Note: Every permutation is made up of disjoint cycles. list key table [0] d 4 [1] b 1 [2] f 3 [3] c 0 [4] a 5 [5] e 2 temp = d current = 0 next = 4 a 0 4 5 e 4 5 2 f 5 2 3 c 2 3 d 3 In the worst case there are ? cycles and requires ? record moves. N / 2 3N / 2 T = O( m N ) where m is the size of a structure. 〖 Example 〗 Table Sort 8/15

10
Laboratory Project 2 Sort Poems Detailed requirements can be downloaded from http://acm.zju.edu.cn/dsaa/ Don’t forget to sign you names and duties at the end of your report. Due: Friday, October 23rd, 2009 at 10:00pm 9/15

11
§9 A General Lower Bound for Sorting 【 Theorem 】 Any algorithm that sorts by comparisons only must have a worst case computing time of ( N log N ). Proof: K 0 K 1 K 1 K 2 K 0 K 2 stop [0,1,2] stop [0,2,1] stop [2,0,1] TF TF K 0 K 2 K 1 K 2 stop [1,0,2] stop [1,2,0] stop [2,1,0] TF TF TF Decision tree for insertion sort on R 0, R 1, and R 2 When sorting N distinct elements, there are N! different possible results. Thus any decision tree must have at least N! leaves. If the height of the tree is k, then N! 2 k 1 (# of leaves in a complete binary tree) k log(N!) + 1 Since N! (N/2) N/2 and log 2 N! (N/2)log 2 (N/2) = ( N log 2 N ) Therefore T(N) = k c N log 2 N. 10/15

12
§10 Bucket Sort and Radix Sort Bucket Sort 〖 Example 〗 Suppose that we have N students, each has a grade record in the range 0 to 100 (thus there are M = 101 possible distinct grades). How to sort them according to their grades in linear time? count 0110088 Algorithm { initialize count[ ]; while (read in a student’s record) insert to list count[stdnt.grade]; for (i=0; i

13
〖 Example 〗 Given N = 10 integers in the range 0 to 999 ( M = 1000 ) Is it possible to sort them in linear time? Radix Sort Input: 64, 8, 216, 512, 27, 729, 0, 1, 343, 125 0 Bucket 123456789 Sort according to the Least Significant Digit first. 0 Pass 1 1512343646412521627278729 Pass 2 0 1 5125123433436464125125 2162162727 8729729 Pass 3 0 1 8 512216125 27 729343 64 Output: 0, 1, 8, 27, 64, 125, 216, 343, 512, 729 T=O(P(N+B)) where P is the number of passes, N is the number of elements to sort, and B is the number of buckets. What if we sort according to the Most Significant Digit first? §10 Bucket Sort and Radix Sort 12/15

14
K i j ::= the j-th key of record R i K i 0 ::= the most significant key of record R i Suppose that the record R i has r keys. K i r 1 ::= the least significant key of record R i A list of records R 0,..., R n 1 is lexically sorted with respect to the keys K 0, K 1,..., K r 1 iff That is, K i 0 = K i+1 0,..., K i l = K i+1 l, K i l+1 < K i+1 l+1 for some l < r 1. 〖 Example 〗 A deck of cards sorted on 2 keys K 0 [Suit] < < < K 1 [Face value]2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A Sorting result : 2 ... A 2 ... A 2... A 2 ... A §10 Bucket Sort and Radix Sort 13/15

15
MSD ( Most Significant Digit ) Sort Sort on K 0 : for example, create 4 buckets for the suits 33 33 55 55 AA AA 4 4 Sort each bucket independently (using any sorting technique) §10 Bucket Sort and Radix Sort 14/15

16
§10 Bucket Sort and Radix Sort LSD ( Least Significant Digit ) Sort Sort on K 1 : for example, create 13 buckets for the face values 22 22 33 33 4 4 55 55 AA AA ... Reform them into a single pile AA AA 33 33 22 22 Create 4 buckets and resort Question: Is LSD always faster than MSD? Home work: p.231 6.32 An application of Bucket Sort [ Think: why is it faster than O(N log N)? ] 15/15

Similar presentations

OK

Chapter 5 Sorting There are several easy algorithms to sort in O(N 2 ), such as insertion sort. There is an algorithm, Shellsort, that is very simple to.

Chapter 5 Sorting There are several easy algorithms to sort in O(N 2 ), such as insertion sort. There is an algorithm, Shellsort, that is very simple to.

© 2018 SlidePlayer.com Inc.

All rights reserved.

Ads by Google

Ppt on networking related topics about economics Ppt on sports day events Ppt on temples of south india Download ppt on brain chip technology Ppt on c language fundamentals inc Ppt on drought in india Ppt on animal kingdom class 9 Ppt on emotional intelligence by daniel goleman Ppt on soft skills download Ppt online application form 2016/2017