Академический Документы
Профессиональный Документы
Культура Документы
1, c 3, a 3, b 7, d 7, g 7, e
B ∅ ∅ ∅ ∅ ∅ ∅ ∅
0 1 2 3 4 5 6 7 8 9
Bucket-Sort
! Let be S be a sequence of n
(key, element) items with keys Algorithm bucketSort(S):
in the range [0, N - 1] Input: Sequence S of entries with
! Bucket-sort uses the keys as integer keys in the range [0, N − 1]
indices into an auxiliary array B Output: Sequence S sorted in
of sequences (buckets) nondecreasing order of the keys
Phase 1: Empty sequence S by let B be an array of N sequences,
moving each entry (k, o) into its each of which is initially empty
bucket B[k] for each entry e in S do
Phase 2: For i = 0, …, N - 1, move k = the key of e
the entries of bucket B[i] to the remove e from S
end of sequence S insert e at the end of bucket B[k]
! Analysis: for i = 0 to N−1 do
n Phase 1 takes O(n) time for each entry e in B[i] do
n Phase 2 takes O(n + N) time remove e from B[i]
Bucket-sort takes O(n + N) time insert e at the end of S
1
Bucket-Sort and Radix-Sort 3/29/14 21:33
Example
! Key range [0, 9]
7, d 1, c 3, a 7, g 3, b 7, e
Phase 1
1, c 3, a 3, b 7, d 7, g 7, e
B ∅ ∅ ∅ ∅ ∅ ∅ ∅
0 1 2 3 4 5 6 7 8 9
Phase 2
1, c 3, a 3, b 7, d 7, g 7, e
© 2014 Goodrich, Tamassia, Goldwasser Bucket-Sort and Radix-Sort 3
2
Bucket-Sort and Radix-Sort 3/29/14 21:33
Lexicographic Order
! A d-tuple is a sequence of d keys (k1, k2, …, kd), where
key ki is said to be the i-th dimension of the tuple
! Example:
n The Cartesian coordinates of a point in space are a 3-tuple
! The lexicographic order of two d-tuples is recursively
defined as follows
(x1, x2, …, xd) < (y1, y2, …, yd)
⇔
x1 < y1
∨ x1 = y1 ∧ (x2, …, xd) < (y2, …, yd)
I.e., the tuples are compared by the first dimension,
then by the second dimension, etc.
Lexicographic-Sort
! Let Ci be the comparator Algorithm lexicographicSort(S)
that compares two tuples by Input sequence S of d-tuples
their i-th dimension Output sequence S sorted in
! Let stableSort(S, C) be a lexicographic order
stable sorting algorithm that
uses comparator C for i ← d downto 1
! Lexicographic-sort sorts a stableSort(S, Ci)
sequence of d-tuples in
lexicographic order by Example:
executing d times algorithm
stableSort, one per (7,4,6) (5,1,5) (2,4,6) (2, 1, 4) (3, 2, 4)
dimension
! Lexicographic-sort runs in (2, 1, 4) (3, 2, 4) (5,1,5) (7,4,6) (2,4,6)
O(dT(n)) time, where T(n) is (2, 1, 4) (5,1,5) (3, 2, 4) (7,4,6) (2,4,6)
the running time of
stableSort (2, 1, 4) (2,4,6) (3, 2, 4) (5,1,5) (7,4,6)
© 2014 Goodrich, Tamassia, Goldwasser Bucket-Sort and Radix-Sort 6
3
Bucket-Sort and Radix-Sort 3/29/14 21:33
Radix-Sort
! Radix-sort is a
specialization of
lexicographic-sort that
uses bucket-sort as the
stable sorting algorithm
in each dimension Algorithm radixSort(S, N)
! Radix-sort is applicable Input sequence S of d-tuples such
to tuples where the that (0, …, 0) ≤ (x1, …, xd) and
keys in each dimension i (x1, …, xd) ≤ (N - 1, …, N - 1)
are integers in the for each tuple (x1, …, xd) in S
range [0, N - 1] Output sequence S sorted in
lexicographic order
! Radix-sort runs in time for i ← d downto 1
O(d( n + N))
bucketSort(S, N)
Radix-Sort for
Binary Numbers
! Consider a sequence of n
b-bit integers
x = xb - 1 … x1x0
! We represent each element Algorithm binaryRadixSort(S)
as a b-tuple of integers in Input sequence S of b-bit
integers
the range [0, 1] and apply Output sequence S sorted
radix-sort with N = 2 replace each element x
! This application of the of S with the item (0, x)
radix-sort algorithm runs in for i ← 0 to b - 1
O(bn) time replace the key k of
! For example, we can sort a each item (k, x) of S
with bit xi of x
sequence of 32-bit integers
bucketSort(S, 2)
in linear time
© 2014 Goodrich, Tamassia, Goldwasser Bucket-Sort and Radix-Sort 8
4
Bucket-Sort and Radix-Sort 3/29/14 21:33
Example
! Sorting a sequence of 4-bit integers