8-2 Sorting in place in linear time
Suppose that we have an array of \(n\) data records to sort and that the key of each record has the value \(0\) or \(1\). An algorithm for sorting such a set of records might possess some subset of the following three desirable characteristics:
- The algorithm runs in \(O(n)\) time.
- The algorithm is stable.
- The algorithm sorts in place, using no more than a constant amount of storage space in addition to the original array.
a. Give an algorithm that satisfies criteria 1 and 2 above.
b. Give an algorithm that satisfies criteria 1 and 3 above.
c. Give an algorithm that satisfies criteria 2 and 3 above.
d. Can you use any of your sorting algorithms from parts (a)–© as the sorting method used in line 2 of \(\text{RADIX-SORT}\), so that \(\text{RADIX-SORT}\) sorts \(n\) records with \(b\)-bit keys in \(O(bn)\) time? Explain how or why not.
e. Suppose that the \(n\) records have keys in the range from \(1\) to \(k\). Show how to modify counting sort so that it sorts the records in place in \(O(n + k)\) time. You may use \(O(k)\) storage outside the input array. Is your algorithm stable? (\(\textit{Hint:}\) How would you do it for \(k = 3\)?)
a. Counting-Sort.
b. Quicksort-Partition.
c. Insertion-Sort.
d. (a) Yes. (b) No. © No.
e.
Thanks @Gutdub for providing the solution in this issue.
C++ | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
In place (storage space is \(\Theta(k)\)) but not stable.
本页面的全部内容在 小熊老师 - 莆田青少年编程俱乐部 0594codes.cn 协议之条款下提供,附加条款亦可能应用