Algoritma dan Struktur Data : Merge Sort dan Quick Sort
Divide & Conquer
General Plan
Divide the problem into a number of sub-problems ideally of about equal size. Sub-problem: smaller instances of the same problem.
Conquer the sub-problems: solving them (typically) recursively. If the sizes are small enough: solve the sub-problems in a straightforward manner (or using different algorithm).
If necessary, the solutions to the sub-problems are combined to get a solution to the original problem
Illustration
Advantages
- Easy to model
- Parallelizable
- Efficient
- Powerful for difficult problems
Merge Sort
Idea
Divide : Divide the n-element sequence to be sorted into two sub-sequences of n/2 elements each.
Conquer : Sort the two sub-sequences recursively using merge sort.
Combine : Merge the two sorted sub-sequences to produce the sorted answer.
Pseudocode
Example
Running Time
Quicksort
- Not difficult to implement
- Works well for a variety kinds of input data
- Substantially faster in typical application
- In-place
Idea
Given an array A[p..r]
Divide :
Partition the array A[p..r] into two (possibly empty) subarrays :
- A[p..q-1] : each element is <= A[q]
- A[q+1..r] : each element is > A[q]
Conquer: Sort both subarrays by recursive calls to quicksort
Combine: The subarrays are already sorted, the entire array A[p..r] is now sorted
Pseudocode
Example
Running Time
Running time of Quicksort depends on the partitioning :
Worst-case partitioning : Partitioning produces one subproblem with n-1 elements and one with 0 elements.
Best case partitioning: Partitioning produces two subproblems, each of size no more than n/2
With randomized partitioning, expected running time of quicksort : O(n lgn)
Posting Komentar