algorithm - How to sort a 0/1 array with 2n/3 comparisons?

Posted by Jackson Tale on Stack Overflow See other posts from Stack Overflow or by Jackson Tale
Published on 2012-04-01T14:39:58Z Indexed on 2012/04/04 11:28 UTC
Read the original article Hit count: 325

In Algorithm Design Manual, there is such an excise

4-26 Consider the problem of sorting a sequence of n 0’s and 1’s using comparisons. For each comparison of two values x and y, the algorithm learns which of x < y, x = y, or x > y holds.

(a) Give an algorithm to sort in n - 1 comparisons in the worst case. Show that your algorithm is optimal.

(b) Give an algorithm to sort in 2n/3 comparisons in the average case (assuming each of the n inputs is 0 or 1 with equal probability). Show that your algorithm is optimal.

For (a), I think it is fairly easy. I can choose a[n-1] as pivot, then do something like in quicksort partition, scan 0 to n - 2, find the middle point where left side is all 0 and right side is all 1, this take n - 1 comparisons.

But for (b), I can't get a clue. It says "each of the n inputs is 0 or 1 with equal probability", so I guess I can assume the numbers of 0 and 1 equal? But how can I get a result which is related to 1/3? divide the whole array into 3 groups?

Thanks

© Stack Overflow or respective owner

Related posts about algorithm

Related posts about sorting