|
CS 3343/3341 Analysis of Algorithms Spring 2012 Recitation 5 Heapsort, Median, Etc. Partial Answers |
| ^
| 0 1 2 3 4 5 6 7 8 9 10 11 12
-----------|------------------------------------------------------------------
Array | 16 19 9 5 13 8 7 4 21 2 6 11 18
|
Partition 1| 16 9 5 13 8 7 4 2 6 11 18 19 21
|
Subarray 1 | 16 9 5 13 8 7 4 2 6 11 (18) (19) (21)
|
Partition 2| 9 5 8 7 4 2 6 11 16 13 (18) (19) (21)
|
Subarray 2 | 9 5 8 7 4 2 6 (11) (16) (13) (18) (19) (21)
|
Partition 3| 5 4 2 6 9 8 7 (11) (16) (13) (18) (19) (21)
|
Subarray 3 | (5) (4) (2) (6) 9 8 7 (11) (16) (13) (18) (19) (21)
|
Partition 4| (5) (4) (2) (6) 7 8 9 (11) (16) (13) (18) (19) (21)
|
Subarray 4 | (5) (4) (2) (6) (7) 8 9 (11) (16) (13) (18) (19) (21)
|
Partition 5| (5) (4) (2) (6) (7) 8 9 (11) (16) (13) (18) (19) (21)
|
|
Tree Cost
^
n ----> c n |
| |
(3/4) n ----> c (3/4) n log4/3(n) =
| |
(3/4)^2 n ----> c (3/4)2 n log2(n) / log2(4/3) =
| |
(3/4)^3 n ----> c (3/4)3 n 3.47606 log2(n)
| |
...
1 ----> c |
v
|
// Median.java: finds median value
public class Median {
public int median(int[] A, int p, int r,
int mid) {
printa(A, p, r);
int pivot = partition(A, p, r);
printa(A, p, r);
if (mid == pivot) return A[mid];
else if (mid < pivot)
return median(A, p, pivot-1, mid);
else return median(A, pivot+1, r, mid);
}
public int partition(int[] A, int p, int r) {
int x = A[r];
int i = p - 1;
for (int j = p; j < r; j++) {
if (A[j] <= x) {
i++;
exchange(A,i, j);
}
}
exchange(A, i+1, r);
return i + 1;
}
private void exchange(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
| private void printa(int[] A, int p, int r) {
int i = 0;
while (i < p) printn2(A[i++]);
for (i = p; i <= r; i++)
printn1(A[i]);
i = r+1;
while (i <= A.length - 1) printn2(A[i++]);
System.out.println();
}
void printn1(int i) {
if (i < 10) System.out.print(" " + i + " ");
else System.out.print(" " + i + " ");
}
void printn2(int i) {
if (i < 10) System.out.print(" (" + i + ")");
else System.out.print(" (" + i + ")");
}
public static void main(String[] args) {
int[] A =
{43,22,51,19,11,67,13,36,32,49,28,15,38};
Median med = new Median();
System.out.println("Median:" +
med.median(A,0,A.length-1,(A.length-1)/2));
}
} |
0 | 0 1 2 3 4 5 6 7 8 9 10 11 12
-----------|------------------------------------------------------------------
Array | 43 22 51 19 11 67 13 36 32 49 28 15 38
|
Partition 1| 22 19 11 13 36 32 28 15 38 49 43 51 67
|
Subarray 1 | 22 19 11 13 36 32 28 15 (38) (49) (43) (51) (67)
|
Partition 2| 11 13 15 19 36 32 28 22 (38) (49) (43) (51) (67)
|
Subarray 2 | (11) (13) (15) 19 36 32 28 22 (38) (49) (43) (51) (67)
|
Partition 3| (11) (13) (15) 19 22 32 28 36 (38) (49) (43) (51) (67)
|
Subarray 3 | (11) (13) (15) (19) (22) 32 28 36 (38) (49) (43) (51) (67)
|
Partition 4| (11) (13) (15) (19) (22) 32 28 36 (38) (49) (43) (51) (67)
|
Subarray 4 | (11) (13) (15) (19) (22) 32 28 (36) (38) (49) (43) (51) (67)
|
Partition 5| (11) (13) (15) (19) (22) 28 32 (36) (38) (49) (43) (51) (67)
|
Subarray 5 | (11) (13) (15) (19) (22) (28) 32 (36) (38) (49) (43) (51) (67)
|
Partition 5| (11) (13) (15) (19) (22) (28) 32 (36) (38) (49) (43) (51) (67)
| Median: 32
|
public void maxHeapify2(int[] A, int i) {
while(true) {
printheap(A);
int l = left(i);
int r = right(i);
int largest;
if (l <= heapsize && A[l] > A[i]) largest = l;
else largest = i;
if (r <= heapsize && A[r] > A[largest]) largest = r;
if (largest == i) return;
exchange(A, i, largest);
i = largest;
}
} |
buildMaxHeap,i: 5;heapsize:10, heap: 26, 5, 77, 1, 85, 11, 59, 15, 48, 19 buildMaxHeap,i: 4;heapsize:10, heap: 26, 5, 77, 48, 85, 11, 59, 15, 1, 19 buildMaxHeap,i: 3;heapsize:10, heap: 26, 5, 77, 48, 85, 11, 59, 15, 1, 19 buildMaxHeap,i: 2;heapsize:10, heap: 26, 85, 77, 48, 19, 11, 59, 15, 1, 5 buildMaxHeap,i: 1;heapsize:10, heap: 85, 48, 77, 26, 19, 11, 59, 15, 1, 5 |
after buildMaxHeap: heapsize:8, heap: 25, 17, 20, 7, 2, 13, 8, 4, heapsort,after step 8:heapsize:7, heap: 20, 17, 13, 7, 2, 4, 8, 25, heapsort,after step 7:heapsize:6, heap: 17, 8, 13, 7, 2, 4, 20, 25, heapsort,after step 6:heapsize:5, heap: 13, 8, 4, 7, 2, 17, 20, 25, heapsort,after step 5:heapsize:4, heap: 8, 7, 4, 2, 13, 17, 20, 25, heapsort,after step 4:heapsize:3, heap: 7, 2, 4, 8, 13, 17, 20, 25, heapsort,after step 3:heapsize:2, heap: 4, 2, 7, 8, 13, 17, 20, 25, heapsort,after step 2:heapsize:1, heap: 2, 4, 7, 8, 13, 17, 20, 25, heapsize:1, heap: 2, 4, 7, 8, 13, 17, 20, 25, |