Sorting algorithms/Gnome sort: Difference between revisions
Content added Content deleted
m (→version 1: changed to a smaller font size for the output.) |
(Added Wren) |
||
Line 3,005: | Line 3,005: | ||
2/02/2010 10:19:51 AM, 3/02/2010 10:19:51 AM, 5/02/2010 10:19:51 AM</lang> |
2/02/2010 10:19:51 AM, 3/02/2010 10:19:51 AM, 5/02/2010 10:19:51 AM</lang> |
||
Note: All data in VBScript is of type Variant. Thus the code can sort many different types of data without code modification. |
Note: All data in VBScript is of type Variant. Thus the code can sort many different types of data without code modification. |
||
=={{header|Wren}}== |
|||
<lang ecmascript>var gnomeSort = Fn.new { |a, asc| |
|||
var size = a.count |
|||
var i = 1 |
|||
var j = 2 |
|||
while (i < size) { |
|||
if ((asc && a[i-1] <= a[i]) || (!asc && a[i-1] >= a[i])) { |
|||
i = j |
|||
j = j + 1 |
|||
} else { |
|||
var t = a[i-1] |
|||
a[i-1] = a[i] |
|||
a[i] = t |
|||
i = i - 1 |
|||
if (i == 0) { |
|||
i = j |
|||
j = j + 1 |
|||
} |
|||
} |
|||
} |
|||
} |
|||
var as = [ [4, 65, 2, -31, 0, 99, 2, 83, 782, 1], [7, 5, 2, 6, 1, 4, 2, 6, 3] ] |
|||
for (asc in [true, false]) { |
|||
System.print("Sorting in %(asc ? "ascending" : "descending") order:\n") |
|||
for (a in as) { |
|||
var b = (asc) ? a : a.toList |
|||
System.print("Before: %(b)") |
|||
gnomeSort.call(b, asc) |
|||
System.print("After : %(b)") |
|||
System.print() |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Sorting in ascending order: |
|||
Before: [4, 65, 2, -31, 0, 99, 2, 83, 782, 1] |
|||
After : [-31, 0, 1, 2, 2, 4, 65, 83, 99, 782] |
|||
Before: [7, 5, 2, 6, 1, 4, 2, 6, 3] |
|||
After : [1, 2, 2, 3, 4, 5, 6, 6, 7] |
|||
Sorting in descending order: |
|||
Before: [-31, 0, 1, 2, 2, 4, 65, 83, 99, 782] |
|||
After : [782, 99, 83, 65, 4, 2, 2, 1, 0, -31] |
|||
Before: [1, 2, 2, 3, 4, 5, 6, 6, 7] |
|||
After : [7, 6, 6, 5, 4, 3, 2, 2, 1] |
|||
</pre> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |