Content deleted Content added
K.e.coffman (talk | contribs) Declining submission: essay - Submission reads like an essay (AFCH 0.9) |
Reformatted the article. Changed the example. Updated the code. Altered it a bit to make it more from a neutral point of view. |
||
Line 10:
[[File:StrandSort.gif|thumb|220x220px|Strand Sort Animation]]
'''Strand sort''' is a very simple [[Recursion (computer science)|recursive]] [[sorting algorithm]] that sorts items of a list into increasing order.
Strand sort is a very simple [[Recursion (computer science)|recursive]] [[sorting algorithm]] that sorts items of a list into increasing order. It works by moving the first element of a list into a sub-list. Then comparing each subsequent element in the sub-list to the original list and moving each element in the original list that is greater than the element in the sub-list to the sub-list. Then the sub-list is merged into a new list. Repeat this process and merge all sub-lists until all elements are sorted.<ref name=":0">{{Cite book|url=https://www.worldcat.org/oclc/641462443|title=IT enabled practices and emerging management paradigms|date=2008|publisher=Prestige Institute of Management and Research|others=Gupta, I. C. (Ishwar Chandra), 1946-, Jaroliya, Deepak., Prestige Institute of Management and Research.|isbn=9788174466761|edition= 1st|___location=Indore|oclc=641462443}}</ref> This algorithm is called strand sort because there are strands of sorted elements within the unsorted elements that are removed one at a time.<ref name=":1">{{Cite web|url=https://xlinux.nist.gov/dads/HTML/strandSort.html|title=strand sort|website=xlinux.nist.gov|language=en-US|access-date=2018-11-06}}</ref> This algorithm is also comparison [[sorting algorithm]] because elements of the sub-list are compared to elements of the original list. This algorithm is also used in [[J Sort]] for fewer than 40 elements.<ref>{{Cite book|url=https://www.worldcat.org/oclc/311311576|title=Data structures using C : 1000 problems and solutions|last=Sudipta.|first=Mukherjee,|date=2008|publisher=Tata McGraw-Hill|isbn=9780070667655|___location=New Delhi|oclc=311311576}}</ref>▼
It has [[Big O notation|O]](n<sup>2</sup>) worst time complexity which occurs when the input list is reverse sorted.<ref name=":0">{{Cite book|url=https://www.worldcat.org/oclc/641462443|title=IT enabled practices and emerging management paradigms|date=2008|publisher=Prestige Institute of Management and Research|others=Gupta, I. C. (Ishwar Chandra), 1946-, Jaroliya, Deepak., Prestige Institute of Management and Research.|isbn=9788174466761|edition=1st|___location=Indore|oclc=641462443}}</ref> It has a best case [[time complexity]] of O(n) which occurs when the input is a list that is already sorted.<ref name=":1">{{Cite web|url=https://xlinux.nist.gov/dads/HTML/strandSort.html|title=strand sort|website=xlinux.nist.gov|language=en-US|access-date=2018-11-06}}</ref> Strand sort is not [[In-place algorithm|in-place]] as it’s space complexity is O(n).<ref name=":0" />
▲
== Example ==
Based off of the description of the algorithm provided in the book, ''IT Enabled Practices and Emerging Management Paradigms''.<ref name=":0" />
'''Step 1:''' Start with a list of numbers: {
'''Step 2:''' Next move the first element of the list into a new sub-list: sub-list contains {
'''Step 3:''' Then iterate through the original list and compare each number to
* 4 < 5 so 4 is not added to the sub-list.
'''Step 4:''' Now compare 19 with the remaining elements in the original list until there is a number greater than 19. ▼
* 0 < 5 so 0 is not added to the sub-list.
'''Step 5:''' Now compare 25 to the remaining elements in the original list until there is a number greater than 25. ▼
'''Step
* 8 < 9 so 8 is not added to the sub-list.
* 7 < 9 so 7 is not added to the sub-list.
The sub-list is empty, and the solution list contains {13, 19, 25, 19}▼
'''Step
'''Step
▲'''Step
'''Step 11:''' Move the first element of the original list into sub-list. Sub-list contains {6}▼
* 4 > 1 so 4 is added to the sub-list and 4 is removed from the original list.
'''Step 12:''' Iterate through the original list and compare each number to 6 until there is a number greater than 6. ▼
* 2 < 4 so 2 is not added to the sub-list.
'''Step 13:''' Since there are no more elements in the original list to compare {6} to, the sub-list is merged with the solution list.▼
* 0 < 4 so 2 is not added to the sub-list.
The solution list now contains: {6, 7, 13, 19, 25, 19}.▼
* 6 > 4 so 6 is added to the sub-list and is removed from the original list.
'''Step 14:''' Move the first element of the original list into sub-list. Sub-list contains {1}▼
'''Step
* 7 < 8 so 7 is not added to the sub-list.
'''Step 11:''' Since there are no more elements in the original list to compare {8} to, the sub-list is merged with the solution list. Now sub-list is empty and solution-list contains: {1, 4, 5, 6, 8, 9}.
▲'''Step
* 0 < 2 so 0 is not added to the sub-list.
* 3 > 2 so 3 is added to the sub-list and is removed from the original list.
▲'''Step
* 7 > 3 so 7 is added to the sub-list and is removed from the original list.
▲'''Step
▲'''Step
'''Step 17:''' Since the original list is now empty, the sub-list is merged with the solution list. The solution list now contains: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. There are now no more elements in the original list, and all of the elements in the solution list have successfully been sorted into increasing numerical order.
== Implementation ==
Since Strand Sort requires many insertions and deletions, it is best to use a linked list when implementing
package strandSort;
Line 84 ⟶ 109:
/**
* This is a recursive Strand Sort method. It takes in a linked list of
* integers as
* linked list is empty. Then proceeds to the Strand sort algorithm until
* the linked list is empty.
*
* @param origList:
Line 108 ⟶ 133:
// Iterate through the original list, checking if any elements are
// Greater than the element in the sub list.
int index = 0;
for (int j = 0; j < origList.size(); j++) {
Line 118 ⟶ 142:
}
}
// Merge sub-list into solution list.
// There are // Case 1: The first recursive call, add all of the elements to the
// solution list in sequential order
if (k == 0) {
for (int i = 0; i < subList.size(); i++) {
Line 131 ⟶ 154:
}
// Case 2: After the first recursive call if there subList contains▼
else if (subList.size() > 1) {▼
solList.addFirst(subList.get(w));▼
// w = w+1;▼
// This works by comparing the greatest element in the sublist (which is always the last element)
// with the first element in the solution list.
int solStart = 0;
while (!subList.isEmpty()) {
if (subList.get(subEnd) > solList.get(solStart)) {
solStart++;
▲ } else {
▲ // It just gets added to the front of the solution list.
} else {
subList.remove(subEnd);
subEnd--;
▲ }
}
}
strandSortIterative(origList);
}
Line 162 ⟶ 187:
LinkedList<Integer> origList = new LinkedList<Integer>();
// Add the following integers to the linked list: {
origList.add(
origList.add(7);▼
origList.add(19);▼
origList.add(6);▼
origList.add(25);▼
origList.add(29);▼
origList.add(1);
origList.add(4);
▲ origList.add(6);
origList.add(3);
origList.add(8);
▲ origList.add(7);
strandSortIterative(origList);
|