Content uploaded by Parisa YousefzadehFard
Author content
All content in this area was uploaded by Parisa YousefzadehFard
Content may be subject to copyright.
Available via license: CC BY-NC-ND 3.0
Content may be subject to copyright.
Procedia Computer Science 00 (2010) 000–000
Procedia
Computer
Science
www.elsevier.com/locate/procedia
WCIT-2010
Heuristic and pattern based Merge Sort
Manouchehr Zadahmad jafarloua*,Parisa Yousefzadeh farda
aDep. of Computer, Islamic Azad University-Ilkhchi Branch, Imam St., Ilkhchi, Iran
Abstract
The aim of this study is to present a stable and adaptable Merge Sort algorithm that uses the design patterns to reduce
computational complexity of swaps and memory usage. The order of Settlement of elements recorded by design patterns and
merging one element by another (first phase) replaced with chunk merging. This algorithm has been implemented by C++
programming langua ge.
Keywords: Merge s ort, De sign patt erns, co mputati onal co mplexit y;
1. Introduction
Although many consider that sorting algorithm is a solved problem, useful new sorting algorithms are still being
invented (for example, library sort was first published in 2004). Sorting algorithms are prevalent in introductory
computer science classes, where the abundan ce of algorithms for the problem provides a gentle introduction to a
variety of core algorithm concepts, such as big O notation, divide and conquer algorithms, data structures,
randomized algorithms, best, worst and average case analysis, time-space tradeoffs, and lower bounds.
Classification
Sorting algorithms used in computer science are often classified by([2,3,4]):
xComputational complexity
xComputational complexity of swaps (for "in place" algorithms).
xMemory usage
xRecursion.
xStability: stable sorting algorithms maintain the relative order of records with equal keys (i.e., values). See
below for more information.
xWhether or not they are a comparison sort. A comparison sort examines the data only by comparing two
elements with a comparison operator.
xGeneral method: insertion, exchange, selection, merging, etc..
xAdaptabil ity: Wheth er or not the presortedness of the input affects the running time.
* Manouchehr Zadahmad jafarlou. Tel.: +98-914-407-9505; fax: +98-412-332-6063.
E-mail address: zadahmad@gmail.com
c
⃝2010 Published by Elsevier Ltd. Selection and/or peer-review under responsibility of the Guest Editor.
Procedia Computer Science 3 (2011) 322–324
www.elsevier.com/locate/procedia
1877-0509 c
⃝2010 Published by Elsevier Ltd.
doi:10.1016/j.procs.2010.12.055
Manouchehr Zadahmad jafarlou / Procedia Computer Science 00 (2010) 000–000
2. stgEx pattern, status data structure, stgMerge algorithm and stgMerge sort
stgEx pattern is a Strategy pattern [1] based explorer pattern and has three state (three different algorithm)( Fig.
1) . stgEx explore interior of under sort array. The result of each of algorithms is the data structures called status.
The resulted status array of each algorithm differs in sizes, values and special viewpoin ts of presortedn ess with
another one but all of them can optimize Merge sort algorithm. We call Merge algorithm the stgM and Merge sort
[5,6] the stgMS, because t hese algorithms have three states and implemented with strategy pattern.
Fig. 1. Heuristic and pattern based Merge Sort implementation
2.1. First algorithm
In the first sate, before every calling merge algorithm (stgM), the first state of stgEx pattern called and th e next
partial array in under sorting array has found. This algorithm is a for loop with O(n) time order and produce a tow
element array named status. First element of status is the index of first element of next partial array and the second
one represent "the number of elements of partial array"*(+1) for ascending partial array or *(-1) for descending
partial array.
For example for array -4, -3, 0, 1, 3, 8, 9, 14, 5, 6, 8, 14, 2, 1, -3, 1 … if the (-4, -3, 0, 1, 3, 8, 9, 14) be the part of
array that sorted before with stMS, (5, 6, 8, 14) will be the next partial ordered array and so the status array is (8,
+4)- The result of stgEx. Then stgM called with values of status array (stgM(8, +4)) and then 0->7 indexed partial
sorted array merged with 8->11 indexed new partial array and 0->11 indexed partial sorted array produced with
stgMS algorithm. For the next iteration of stgMS, 0->11 indexed partial sorted array merged with (2, 1, -3)
descending partial array -(stgM(12, -3))- from the last element to the first element to produce an ascending sorted
array and so on.
This algorithm used when the numbers of arrays are so many that cannot move to volatile memory.
2.2. Second algorithm
The second algorithm of stgEx pattern did for whole under sort array. The result (status) is: "the first index of
first entry of partial arrays" * +1 for ascending arrays and "the first index of first entry of partial arrays" * -1 for
descending arrays (O(n)). For example for array -8, -4, 0, 4, 3, 1, 0, -2, 5, 7, 9, 10, 5, 4, 2, 1, 3 status will be +1, -4,
+8, -12, +15 so partial arrays are indexed 0->3 (ascending), 4->7 (descending), 8->11 (ascending), 12->14
(descending), 15->15 (ascending). Then status send as argument to stgMS and partial arrays will be the building
blocks for stgM algorithm.
The second algorithm causes a high performance by eliminating of first steps of merge sort algorithm.
2.3. Third algorithm
M.Z. Jafarlou, P.Y. Fard / Procedia Computer Science 3 (2011) 322–324 323
Manouchehr Zadahmad jafarlou / Procedia Computer Science 00 (2010) 000–000
The third algorithm of stgEx pattern did for whole under sort array. The result (status) is: " the number of partial
arrays " * +1 for ascending arrays and "the number of partial arrays" * -1 for descending arrays (O(n)). For example
for array -8, -4, 0, 4, 3, 1, 0, -2, 5, 7, 9, 10, 5, 4, 2, 1, 3 status will be +3, -5, +4, -4, +1. Then status send as argument
to stgMS and partial arrays will be the building blocks for stgM algorithm.
In this algorithm, stgMS is a Huffman coding algorithm [7,8,9] that optimizes merging process by choosing two
partial arrays th at sum of elements of them is less than others before each merging. Th en these two partial arrays
send as argument to stgM algorithm and merged.
Conclusion
Merge sort is an appropriate algorithm with O(n) Computational complexity, but petitioning of array to one
element partial arrays and then merging them cause increasing complexity in time order, system software and
hardware work. The presented algorithm eliminates these extra work using patterns.
References
1. E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented
Software, Addison-Wesley, 1995.
2. Bradford, Phillip G.; Rawlins, Gregory J. E.; Shannon, Gregory E. (1998). "Efficient Matrix Chain Ordering in
Polylog Time". SIAM Journal on Computing (Philadelphia: Society for Industrial and Applied Mathematics) 27 (2):
466–490. doi:10.1137/S0097539794270698. ISSN 1095-7111
3. Papadimitriou, Christos H. (1994). Computational complexity. Reading, Mass.: Addison-Wesley. ISBN 0-201-
53082-1.
4. Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Complexity, Oracles, and Numerical
Computation". Geometric Algorithms and Combinatorial Optimization. Springer. ISBN 038713624X.
5. Cormen, Thomas H.; Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford (2001) [1990]. "2.3: Designing
algorithms". Introduction to Algorithms (2nd ed.). MIT Press and McGraw-Hill. pp. pp. 27–37. ISBN 0-262-03293-
7.
6. Han, Y. and Thorup, M. 2002. Integer Sorting in Expected Time and Linear Space.
In Proceedings of the 43rd Symposium on Foundations of Computer Science (November 16–19, 2002). FOCS.
IEEE Computer Society, Washington, DC, 135-144.
7. D.A. Huffman, "A Method for the Construction of Minimum-Redundancy Codes", Proceedings of the I.R.E.,
September 1952, pp 1098–1102
8. Background story: Profile: David A. Huffman, Scientific American, September 1991, pp. 54–58
9. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms,
Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 16.3, pp. 385–392.
324 M.Z. Jafarlou, P.Y. Fard / Procedia Computer Science 3 (2011) 322–324