Sorting algorithms/Insertion sort: Difference between revisions

m
syntax highlighting fixup automation
m (syntax highlighting fixup automation)
Line 34:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">F insertion_sort(&l)
L(i) 1 .< l.len
V j = i - 1
Line 45:
V arr = [7, 6, 5, 9, 8, 4, 3, 1, 2, 0]
insertion_sort(&arr)
print(arr)</langsyntaxhighlight>
 
{{out}}
Line 56:
These programs use two ASSIST macros (XDECO, XPRNT) to keep the code as short as possible.
===Basic===
<langsyntaxhighlight lang="360asm">* Insertion sort 16/06/2016
INSSORT CSECT
USING INSSORT,R13 base register
Line 112:
XDEC DS CL12 for xdeco
YREGS symbolics for registers
END INSSORT</langsyntaxhighlight>
{{out}}
<pre>
Line 120:
===Assembler Structured Macros===
No harmful gotos [:)Dijkstra], no labels. It's cleaner, but is it clearer?
<langsyntaxhighlight lang="360asm">* Insertion sort 16/06/2016
INSSORTS CSECT
USING INSSORTS,R13 base register
Line 172:
XDEC DS CL12 for xdeco
YREGS symbolics for registers
END INSSORTS</langsyntaxhighlight>
{{out}}
Same as previous
Line 178:
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program insertionSort64.s */
Line 340:
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
</lang>
=={{header|ACL2}}==
<langsyntaxhighlight Lisplang="lisp">(defun insert (x xs)
(cond ((endp xs) (list x))
((< x (first xs))
Line 353:
nil
(insert (first xs)
(isort (rest xs)))))</langsyntaxhighlight>
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">PROC PrintArray(INT ARRAY a INT size)
INT i
 
Line 407:
Test(c,8)
Test(d,12)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Insertion_sort.png Screenshot from Atari 8-bit computer]
Line 433:
 
=={{header|ActionScript}}==
<langsyntaxhighlight ActionScriptlang="actionscript">function insertionSort(array:Array)
{
for(var i:int = 1; i < array.length;i++)
Line 447:
}
return array;
}</langsyntaxhighlight>
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">type Data_Array is array(Natural range <>) of Integer;
procedure Insertion_Sort(Item : in out Data_Array) is
Line 467:
Item(J + 1) := Value;
end loop;
end Insertion_Sort;</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
Line 477:
 
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d]}}
<langsyntaxhighlight lang="algol68">MODE DATA = REF CHAR;
 
PROC in place insertion sort = (REF[]DATA item)VOID:
Line 501:
in place insertion sort(ref data);
FOR i TO UPB ref data DO print(ref data[i]) OD; print(new line);
print((data))</langsyntaxhighlight>
{{out}}
<pre>
Line 510:
=={{header|ALGOL W}}==
External in-place insertion sort routine for integers. From the pseudo code but with variable bounds.
<langsyntaxhighlight lang="algolw">% insertion sorts in-place the array A. As Algol W procedures can't find the bounds %
% of an array parameter, the lower and upper bounds must be specified in lb and ub %
procedure insertionSortI ( integer array A ( * ); integer value lb, ub ) ;
Line 522:
end while_j_ge_0_and_Aj_gt_v ;
A( j + 1 ) := v
end insertionSortI ;</langsyntaxhighlight>
Test the insertionSortI procedure.
<langsyntaxhighlight lang="algolw">begin
% external in-place insertion sort procedure %
procedure insertionSortI ( integer array A( * ); integer value lb, ub ) ;
Line 539:
write( i_w := 1, d( 1 ) );
for i := 2 until 8 do writeon( i_w := 1, d( i ) )
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 547:
=={{header|AppleScript}}==
 
<langsyntaxhighlight lang="applescript">-- In-place insertion sort
on insertionSort(theList, l, r) -- Sort items l thru r of theList.
set listLength to (count theList)
Line 599:
set aList to {60, 73, 11, 66, 6, 77, 41, 97, 59, 45, 64, 15, 91, 100, 22, 89, 77, 59, 54, 61}
sort(aList, 1, -1) -- Sort items 1 thru -1 of aList.
return aList</langsyntaxhighlight>
 
{{output}}
<langsyntaxhighlight lang="applescript">{6, 11, 15, 22, 41, 45, 54, 59, 59, 60, 61, 64, 66, 73, 77, 77, 89, 91, 97, 100}</langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program insertionSort.s */
Line 830:
bx lr @ leave function
iMagicNumber: .int 0xCCCCCCCD
</syntaxhighlight>
</lang>
 
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">insertionSort: function [items][
arr: new items
loop 1..(size items)-1 'i [
Line 851:
]
 
print insertionSort [3 1 2 8 5 7 9 4 6]</langsyntaxhighlight>
 
{{out}}
Line 863:
This implementation finds the position at which the element is to be inserted, and then uses '''array_subcirculate''' to move it into place. The prelude's implementation of '''array_subcirculate''' is a '''memmove(3)'''.
 
<langsyntaxhighlight ATSlang="ats">#include "share/atspre_staload.hats"
 
(*------------------------------------------------------------------*)
Line 948:
print! (" ", arr[i]);
println! ()
end</langsyntaxhighlight>
 
{{out}}
Line 962:
(The complications are necessary to prevent us accidentally having two copies of a linear value. Having two copies would introduce such nasty possibilities as a double-free error, use of a destroyed list, etc.)
 
<langsyntaxhighlight ATSlang="ats">#include "share/atspre_staload.hats"
 
(*------------------------------------------------------------------*)
Line 1,123:
array_uninitize<Strptr1> (arr, i2sz SIZE);
array_ptr_free (pf_arr, pfgc_arr | p_arr)
end</langsyntaxhighlight>
 
{{out}}
Line 1,137:
None of the activities in the following implementation requires allocating a new node. The original list is consumed. However, you can use this code to non-destructively sort a non-linear list by first creating a copy, casting the copy to a linear list, and sorting the copy, then casting the result to a non-linear list.
 
<langsyntaxhighlight ATSlang="ats">#include "share/atspre_staload.hats"
 
(*------------------------------------------------------------------*)
Line 1,322:
val () = list_vt_freelin lst
in
end</langsyntaxhighlight>
 
{{out}}
Line 1,332:
=={{header|AutoHotkey}}==
contributed by Laszlo on the ahk [http://www.autohotkey.com/forum/post-276481.html#276481 forum]
<langsyntaxhighlight AutoHotkeylang="autohotkey">MsgBox % InsertionSort("")
MsgBox % InsertionSort("xxx")
MsgBox % InsertionSort("3,2,1")
Line 1,348:
sorted .= "," . a%A_Index%
Return SubStr(sorted,2) ; drop leading comma
}</langsyntaxhighlight>
 
=={{header|AWK}}==
Sort standard input (storing lines into an array) and output to standard output
<langsyntaxhighlight lang="awk">{
line[NR] = $0
}
Line 1,369:
print line[i]
}
}</langsyntaxhighlight>
 
=={{header|Bash}}==
<langsyntaxhighlight lang="bash">#!/bin/bash
 
# Sorting integers with insertion sort
Line 1,452:
fi
 
#END</langsyntaxhighlight>
 
{{out}}
Line 1,465:
=={{header|B4X}}==
The array type can be changed to Object and it will then work with any numeric type.
<langsyntaxhighlight lang="b4x">Sub InsertionSort (A() As Int)
For i = 1 To A.Length - 1
Dim value As Int = A(i)
Line 1,484:
Next
End Sub
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,500:
 
This version should work on any BASIC that can accept arrays as function arguments.
<langsyntaxhighlight lang="qbasic">DECLARE SUB InsertionSort (theList() AS INTEGER)
 
DIM n(10) AS INTEGER, L AS INTEGER, o AS STRING
Line 1,529:
theList(j + 1) = insertionElement
NEXT
END SUB</langsyntaxhighlight>
 
{{out}}
Line 1,540:
Sorts N elements in array i() into ascending order. Invoke with GO SUB 500.
 
<langsyntaxhighlight lang="zxbasic">500 FOR j=1 TO N-1
510 IF i(j)<=i(j+1) THEN NEXT j: RETURN
520 LET c=i(j+1)
530 FOR k=j TO 1 STEP -1: IF i(k)>c THEN LET i(k+1)=i(k): NEXT k
540 LET i(k+1)=c
600 NEXT j: RETURN</langsyntaxhighlight>
 
For those who prefer GO TOs over conditional NEXTs (fine in ZX BASIC but problematic for compilers and stack-dependent interpreters like NextBASIC’s integer extensions) replace NEXT J: RETURN in line 510 with GO TO 600 and use this line 530:
Line 1,554:
==={{header|BBC BASIC}}===
Note that the array index is assumed to start at zero.
<langsyntaxhighlight lang="bbcbasic"> DIM test(9)
test() = 4, 65, 2, -31, 0, 99, 2, 83, 782, 1
PROCinsertionsort(test(), 10)
Line 1,574:
a(j%) = t
NEXT
ENDPROC</langsyntaxhighlight>
{{out}}
<pre>
Line 1,581:
 
==={{header|Commodore BASIC}}===
<langsyntaxhighlight lang="basic">
10 DIM A(10): N=9
11 REM GENERATE SOME RANDOM NUMBERS AND PRINT THEM
Line 1,590:
32 RETURN
50 PRINT: FOR I=0 TO N: PRINTA(I): NEXT: RETURN
</syntaxhighlight>
</lang>
 
==={{header|IS-BASIC}}===
<langsyntaxhighlight ISlang="is-BASICbasic"> 100 PROGRAM "InserSrt.bas"
110 RANDOMIZE
120 NUMERIC ARRAY(5 TO 21)
Line 1,619:
340 LET A(I+1)=SW
350 NEXT
360 END DEF</langsyntaxhighlight>
 
=={{header|BCPL}}==
<langsyntaxhighlight lang="bcpl">get "libhdr"
 
let insertionSort(A, len) be
Line 1,647:
insertionSort(array, length)
write("After: ", array, length)
$)</langsyntaxhighlight>
{{out}}
<pre>Before: 4 65 2 -31 0 99 2 83 782 1
Line 1,653:
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
 
void insertion_sort(int*, const size_t);
Line 1,685:
return 0;
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,693:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">namespace Sort {
using System;
 
Line 1,713:
}
}
}</langsyntaxhighlight>
'''Example''':
<langsyntaxhighlight lang="csharp"> using Sort;
using System;
 
Line 1,724:
Console.WriteLine(String.Join(" ", entries));
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
Line 1,730:
g++ -std=c++11 insertion.cpp
Uses binary search via std::upper_bound() to find the insertion position in logarithmic time and then performs the insertion via std::rotate() in linear time.
<langsyntaxhighlight lang="cpp">#include <algorithm>
#include <iostream>
#include <iterator>
Line 1,762:
std::cout << "\n";
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,769:
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">
(defn insertion-sort [coll]
(reduce (fn [result input]
Line 1,776:
[]
coll))
</syntaxhighlight>
</lang>
 
Translated from the Haskell example:
<langsyntaxhighlight lang="clojure">
(defn in-sort! [data]
(letfn [(insert ([raw x](insert [] raw x))
Line 1,788:
(reduce insert [] data)))
;Usage:(in-sort! [6,8,5,9,3,2,1,4,7])
;Returns: [1 2 3 4 5 6 7 8 9]</langsyntaxhighlight>
 
=={{header|CLU}}==
<langsyntaxhighlight lang="clu">% Insertion-sort an array in place.
insertion_sort = proc [T: type] (a: array[T])
where T has lt: proctype (T,T) returns (bool)
Line 1,826:
insertion_sort[int](test)
stream$puts(po, "After: ") print_arr[int](test, 3, po)
end start_up</langsyntaxhighlight>
{{out}}
<pre>Before: 7 -5 0 2 99 16 4 20 47 19
Line 1,832:
 
=={{header|CMake}}==
<langsyntaxhighlight lang="cmake"># insertion_sort(var [value1 value2...]) sorts a list of integers.
function(insertion_sort var)
math(EXPR last "${ARGC} - 1") # Sort ARGV[1..last].
Line 1,862:
endforeach(i)
set("${var}" "${answer}" PARENT_SCOPE)
endfunction(insertion_sort)</langsyntaxhighlight>
 
<langsyntaxhighlight lang="cmake">insertion_sort(result 33 11 44 22 66 55)
message(STATUS "${result}") # -- 11;22;33;44;55;66</langsyntaxhighlight>
 
=={{header|COBOL}}==
This exerpt contains just enough of the procedure division to show the sort itself. The appropriate data division entries can be inferred. See also the entry for the Bubble sort for a full program.
<langsyntaxhighlight COBOLlang="cobol"> C-PROCESS SECTION.
PERFORM E-INSERTION VARYING WB-IX-1 FROM 1 BY 1
UNTIL WB-IX-1 > WC-SIZE.
Line 1,895:
 
F-999.
EXIT.</langsyntaxhighlight>
 
And a fully runnable version, by Steve Williams
{{works with|GnuCOBOL}}
<syntaxhighlight lang="cobol">
<lang COBOL>
>>SOURCE FORMAT FREE
*> This code is dedicated to the public domain
Line 1,969:
stop run
.
end program insertionsort.</langsyntaxhighlight>
 
{{out}}
Line 1,978:
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(defun span (predicate list)
(let ((tail (member-if-not predicate list)))
(values (ldiff list tail) tail)))
Line 1,990:
 
(defun insertion-sort (list)
(reduce #'insert list :initial-value nil))</langsyntaxhighlight>
 
<langsyntaxhighlight lang="lisp">(defun insertion-sort (sequence &optional (predicate #'<))
(if (cdr sequence)
(insert (car sequence) ;; insert the current item into
Line 2,009:
(insert item ;; the list of the item sorted with the rest of the list
(cdr sequence)
predicate)))))</langsyntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">void insertionSort(T)(T[] data) pure nothrow @safe @nogc {
foreach (immutable i, value; data[1 .. $]) {
auto j = i + 1;
Line 2,026:
items.insertionSort;
items.writeln;
}</langsyntaxhighlight>
{{out}}
<pre>[2, 4, 11, 17, 19, 24, 25, 28, 44, 46]</pre>
Line 2,032:
===Higher Level Version===
{{trans|C++}}
<langsyntaxhighlight lang="d">import std.stdio, std.range, std.algorithm, std.traits;
 
void insertionSort(R)(R arr)
Line 2,062:
assert(arr3.isSorted);
}
}</langsyntaxhighlight>
{{out}}
<pre>arr1 sorted: [2, 4, 11, 17, 19, 24, 25, 28, 44, 46]
Line 2,071:
{{trans|Java}}
 
<langsyntaxhighlight lang="dart">
 
insertSort(List<int> array){
Line 2,090:
print('${a}');
}
</syntaxhighlight>
</lang>
{{out}}
<pre>array unsorted: [10, 3, 11, 15, 19, 1];
Line 2,101:
 
Static array is an arbitrary-based array of fixed length
<langsyntaxhighlight Delphilang="delphi">program TestInsertionSort;
 
{$APPTYPE CONSOLE}
Line 2,150:
Writeln;
Readln;
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 2,159:
===String sort===
// string is 1-based variable-length array of Char
<langsyntaxhighlight Delphilang="delphi">procedure InsertionSort(var S: string);
var
I, J, L: Integer;
Line 2,175:
S[J + 1]:= Ch;
end;
end;</langsyntaxhighlight>
<pre>
// in : S = 'the quick brown fox jumps over the lazy dog'
Line 2,185:
A direct conversion of the pseudocode.
 
<langsyntaxhighlight lang="e">def insertionSort(array) {
for i in 1..!(array.size()) {
def value := array[i]
Line 2,195:
array[j+1] := value
}
}</langsyntaxhighlight>
 
Test case:
 
<langsyntaxhighlight lang="e">? def a := [71, 53, 22, 24, 83, 54, 39, 78, 65, 26, 60, 75, 67, 27, 52, 59, 93, 62, 85, 99, 88, 10, 91, 85, 13, 17, 14, 96, 55, 10, 61, 94, 27, 50, 75, 40, 47, 63, 10, 23].diverge()
> insertionSort(a)
> a
# value: [10, 10, 10, 13, 14, 17, 22, 23, 24, 26, 27, 27, 39, 40, 47, 50, 52, 53, 54, 55, 59, 60, 61, 62, 63, 65, 67, 71, 75, 75, 78, 83, 85, 85, 88, 91, 93, 94, 96, 99].diverge()</langsyntaxhighlight>
 
=={{header|EasyLang}}==
 
<syntaxhighlight lang="text">subr sort
for i = 1 to len data[] - 1
h = data[i]
Line 2,219:
data[] = [ 29 4 72 44 55 26 27 77 92 5 ]
call sort
print data[]</langsyntaxhighlight>
 
=={{header|Eiffel}}==
Line 2,228:
For a more complete explanation of the Eiffel sort examples, see the [[Sorting algorithms/Bubble sort#Eiffel|Bubble sort]].
 
<langsyntaxhighlight lang="eiffel">class
MY_SORTED_SET [G -> COMPARABLE]
inherit
Line 2,259:
end
 
end</langsyntaxhighlight>
 
=={{header|Elena}}==
ELENA 5.0 :
<langsyntaxhighlight lang="elena">import extensions;
extension op
Line 2,295:
console.printLine("before:", list.asEnumerable());
console.printLine("after :", list.insertionSort().asEnumerable());
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,303:
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule Sort do
def insert_sort(list) when is_list(list), do: insert_sort(list, [])
Line 2,312:
defp insert(x, sorted) when x < hd(sorted), do: [x | sorted]
defp insert(x, [h | t]), do: [h | insert(x, t)]
end</langsyntaxhighlight>
 
Example:
Line 2,321:
 
=={{header|Emacs Lisp}}==
<langsyntaxhighlight lang="lisp">(defun min-or-max-of-a-list (numbers comparator)
"Return minimum or maximum of NUMBERS using COMPARATOR."
(let ((extremum (car numbers)))
Line 2,350:
nil))
 
(insertion-sort '(1 2 3 9 8 7 25 12 3 2 1) #'>)</langsyntaxhighlight>
 
{{out}}
Line 2,357:
 
=={{header|Erlang}}==
<langsyntaxhighlight Erlanglang="erlang">-module(sort).
-export([insertion/1]).
 
Line 2,364:
insert(X,[]) -> [X];
insert(X,L=[H|_]) when X =< H -> [X|L];
insert(X,[H|T]) -> [H|insert(X, T)].</langsyntaxhighlight>
 
And the calls:
<langsyntaxhighlight lang="erlang">1> c(sort).
{ok,sort}
2> sort:insertion([5,3,9,4,1,6,8,2,7]).
[1,2,3,4,5,6,7,8,9]</langsyntaxhighlight>
 
=={{header|ERRE}}==
Note: array index is assumed to start at zero.
<syntaxhighlight lang="erre">
<lang ERRE>
PROGRAM INSERTION_SORT
 
Line 2,408:
PRINT
END PROGRAM
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,416:
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">function insertion_sort(sequence s)
object temp
integer j
Line 2,437:
pretty_print(1,s,{2})
puts(1,"\nAfter: ")
pretty_print(1,insertion_sort(s),{2})</langsyntaxhighlight>
 
{{out}}
Line 2,475:
=={{header|F Sharp|F#}}==
Procedural Version
<langsyntaxhighlight lang="fsharp">
// This function performs an insertion sort with an array.
// The input parameter is a generic array (any type that can perform comparison).
Line 2,490:
B.[j+1] <- value
B // the array B is returned
</syntaxhighlight>
</lang>
 
Functional Version
<langsyntaxhighlight lang="fsharp">
let insertionSort collection =
 
Line 2,509:
| x::xs, ys -> xs |> isort (sinsert x ys)
collection |> isort []
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
{{trans|Haskell}}
<langsyntaxhighlight lang="factor">USING: kernel prettyprint sorting.extras sequences ;
 
: insertion-sort ( seq -- sorted-seq )
<reversed> V{ } clone [ swap insort-left! ] reduce ;
 
{ 6 8 5 9 3 2 1 4 7 } insertion-sort .</langsyntaxhighlight>
{{out}}
<pre>
Line 2,527:
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: insert ( start end -- start )
dup @ >r ( r: v ) \ v = a[i]
begin
Line 2,544:
create test 7 , 3 , 0 , 2 , 9 , 1 , 6 , 8 , 4 , 5 ,
test 10 sort
test 10 cells dump</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
 
<langsyntaxhighlight lang="fortran">subroutine sort(n, a)
implicit none
integer :: n, i, j
Line 2,564:
a(j + 1) = x
end do
end subroutine</langsyntaxhighlight>
 
=== Alternate Fortran 77 version ===
<langsyntaxhighlight lang="fortran"> SUBROUTINE SORT(N,A)
IMPLICIT NONE
INTEGER N,I,J
Line 2,581:
20 A(J + 1) = X
30 CONTINUE
END</langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' version 20-10-2016
' compile with: fbc -s console
' for boundry checks on array's compile with: fbc -s console -exx
Line 2,633:
Print : Print "hit any key to end program"
Sleep
End</langsyntaxhighlight>
{{out}}
<pre>unsort -7 -1 4 -6 5 2 1 -2 0 -5 -4 6 -3 7 3
Line 2,639:
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">InsertionSort := function(L)
local n, i, j, x;
n := Length(L);
Line 2,656:
InsertionSort(s);
s;
# "ABCDEFGHIJKLMNOPQRSTUVWXYZ"</langsyntaxhighlight>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 2,681:
insertionSort(list)
fmt.Println("sorted! ", list)
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,689:
 
A generic version that takes any container that conforms to <code>sort.Interface</code>:
<langsyntaxhighlight lang="go">package main
 
import (
Line 2,710:
insertionSort(sort.IntSlice(list))
fmt.Println("sorted! ", list)
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,718:
 
Using binary search to locate the place to insert:
<langsyntaxhighlight lang="go">package main
 
import (
Line 2,740:
insertionSort(list)
fmt.Println("sorted! ", list)
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,749:
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">def insertionSort = { list ->
def size = list.size()
Line 2,761:
}
list
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang="groovy">println (insertionSort([23,76,99,58,97,57,35,89,51,38,95,92,24,46,31,24,14,12,57,78,4]))
println (insertionSort([88,18,31,44,4,0,8,81,14,78,20,76,84,33,73,75,82,5,62,70,12,7,1]))</langsyntaxhighlight>
 
{{out}}
Line 2,772:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.List (insert)
 
insertionSort :: Ord a => [a] -> [a]
Line 2,779:
-- Example use:
-- *Main> insertionSort [6,8,5,9,3,2,1,4,7]
-- [1,2,3,4,5,6,7,8,9]</langsyntaxhighlight>
 
=={{header|Haxe}}==
<langsyntaxhighlight lang="haxe">class InsertionSort {
@:generic
public static function sort<T>(arr:Array<T>) {
Line 2,814:
Sys.println('Sorted Strings: ' + stringArray);
}
}</langsyntaxhighlight>
 
{{out}}
Line 2,827:
 
=={{header|HicEst}}==
<langsyntaxhighlight lang="hicest">DO i = 2, LEN(A)
value = A(i)
j = i - 1
Line 2,838:
ENDIF
A(j+1) = value
ENDDO</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight Iconlang="icon">procedure main() #: demonstrate various ways to sort a list and string
demosort(insertionsort,[3, 14, 1, 5, 9, 2, 6, 3],"qwerty")
end
Line 2,857:
}
return X
end</langsyntaxhighlight>
 
Note: This example relies on [[Sorting_algorithms/Bubble_sort#Icon| the supporting procedures 'sortop', and 'demosort' in Bubble Sort]]. The full demosort exercises the named sort of a list with op = "numeric", "string", ">>" (lexically gt, descending),">" (numerically gt, descending), a custom comparator, and also a string.
Line 2,871:
=={{header|Io}}==
 
<syntaxhighlight lang="io">
<lang io>
List do(
insertionSortInPlace := method(
Line 2,888:
 
lst := list(7, 6, 5, 9, 8, 4, 3, 1, 2, 0)
lst insertionSortInPlace println # ==> list(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)</langsyntaxhighlight>
 
A shorter, but slightly less efficient, version:
<langsyntaxhighlight lang="io">List do(
insertionSortInPlace := method(
# In fact, we could've done slice(1, size - 1) foreach(...)
Line 2,904:
lst := list(7, 6, 5, 9, 8, 4, 3, 1, 2, 0)
lst insertionSortInPlace println # ==> list(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
</syntaxhighlight>
</lang>
 
=={{header|Isabelle}}==
<langsyntaxhighlight Isabellelang="isabelle">theory Insertionsort
imports Main
begin
Line 2,964:
unfolding rosettacode_haskell_insertionsort_def by(induction xs) simp+
 
end</langsyntaxhighlight>
 
 
Line 2,970:
{{eff note|J|/:~}}
Solution inspired by the Common LISP solution:
<langsyntaxhighlight Jlang="j">isort=:((>: # ]) , [ , < #])/</langsyntaxhighlight>
Example of use:
<langsyntaxhighlight Jlang="j"> isort 32 4 1 34 95 3 2 120 _38
_38 1 2 3 4 32 34 95 120</langsyntaxhighlight>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java5">public static void insertSort(int[] A){
for(int i = 1; i < A.length; i++){
int value = A[i];
Line 2,986:
A[j + 1] = value;
}
}</langsyntaxhighlight>
 
Using some built-in algorithms (warning: not stable, due to the lack of an "upper bound" binary search function)
{{trans|C++}}
<langsyntaxhighlight lang="java5">public static <E extends Comparable<? super E>> void insertionSort(List<E> a) {
for (int i = 1; i < a.size(); i++) {
int j = Math.abs(Collections.binarySearch(a.subList(0, i), a.get(i)) + 1);
Line 3,003:
a[j] = x;
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">
function insertionSort (a) {
for (var i = 0; i < a.length; i++) {
Line 3,019:
var a = [4, 65, 2, -31, 0, 99, 83, 782, 1];
insertionSort(a);
document.write(a.join(" "));</langsyntaxhighlight>
 
=={{header|jq}}==
{{works with|jq|1.4}}
The insertion sort can be expressed directly in jq as follows:
<langsyntaxhighlight lang="jq">def insertion_sort:
reduce .[] as $x ([]; insert($x));</langsyntaxhighlight>where insert/1 inserts its argument into its input, which can, by construction, be assumed here to be sorted. This algorithm will work in jq for any JSON array.
 
The following solution uses an "industrial strength" implementation of bsearch (binary search) that requires the following control structure:
<langsyntaxhighlight lang="jq"># As soon as "condition" is true, then emit . and stop:
def do_until(condition; next):
def u: if condition then . else (next|u) end;
u;</langsyntaxhighlight>
 
bsearch is the only non-trivial part of this solution, and so we include
Line 3,040:
(-1 - ix), where ix is the insertion point that would leave the array sorted.
 
If the input is not sorted, bsearch will terminate but with irrelevant results.<langsyntaxhighlight lang="jq">def bsearch(target):
if length == 0 then -1
elif length == 1 then
Line 3,077:
 
def insertion_sort:
reduce .[] as $x ([]; insert($x));</langsyntaxhighlight>
Example:<langsyntaxhighlight lang="jq">[1, 2, 1, 1.1, -1.1, null, [null], {"null":null}] | insertion_sort</langsyntaxhighlight>
{{Out}}
[null,-1.1,1,1,1.1,2,[null],{"null":null}]
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia"># v0.6
 
function insertionsort!(A::Array{T}) where T <: Number
Line 3,099:
 
x = randn(5)
@show x insertionsort!(x)</langsyntaxhighlight>
 
{{out}}
Line 3,106:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="kotlin">fun insertionSort(array: IntArray) {
for (index in 1 until array.size) {
val value = array[index]
Line 3,132:
insertionSort(numbers)
printArray("Sorted:", numbers)
}</langsyntaxhighlight>
 
{{out}}
Line 3,139:
 
=={{header|Ksh}}==
<langsyntaxhighlight lang="ksh">#!/bin/ksh
 
# An insertion sort in ksh
Line 3,177:
printf "%d " ${arr[i]}
done
printf "%s\n" " )"</langsyntaxhighlight>
 
{{out}}
Line 3,183:
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{def sort
 
Line 3,209:
{sort {A}}
-> [-31,0,1,2,4,65,83,99,782]
</syntaxhighlight>
</lang>
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb"> itemCount = 20
dim A(itemCount)
for i = 1 to itemCount
Line 3,242:
next i
print
return</langsyntaxhighlight>
 
=={{header|Lua}}==
Binary variation of Insertion sort (Has better complexity)
<langsyntaxhighlight lang="lua">do
local function lower_bound(container, container_begin, container_end, value, comparator)
local count = container_end - container_begin + 1
Line 3,291:
binary_insertion_sort_impl(container, comparator)
end
end</langsyntaxhighlight>
 
<langsyntaxhighlight lang="lua">function bins(tb, val, st, en)
local st, en = st or 1, en or #tb
local mid = math.floor((st + en)/2)
Line 3,308:
end
 
print(unpack(isort{4,5,2,7,8,3}))</langsyntaxhighlight>
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">arr := Array([17,3,72,0,36,2,3,8,40,0]):
len := numelems(arr):
for i from 2 to len do
Line 3,322:
arr[j+1] := val:
end do:
arr;</langsyntaxhighlight>
{{Out|Output}}
<pre>[0,0,2,3,3,8,17,36,40,72]</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">insertionSort[a_List] := Module[{A = a},
For[i = 2, i <= Length[A], i++,
value = A[[i]]; j = i - 1;
Line 3,333:
A[[j + 1]] = value;];
A
]</langsyntaxhighlight>
{{out}}
<pre>insertionSort@{ 2, 1, 3, 5}
Line 3,340:
=={{header|MATLAB}} / {{header|Octave}}==
This is a direct translation of the pseudo-code above, except that it has been modified to compensate for MATLAB's 1 based arrays.
<langsyntaxhighlight MATLABlang="matlab">function list = insertionSort(list)
 
for i = (2:numel(list))
Line 3,355:
end %for
end %insertionSort</langsyntaxhighlight>
 
Sample Usage:
<langsyntaxhighlight MATLABlang="matlab">>> insertionSort([4 3 1 5 6 2])
 
ans =
 
1 2 3 4 5 6</langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">insertion_sort(u) := block(
[n: length(u), x, j],
for i from 2 thru n do (
Line 3,376:
u[j + 1]: x
)
)$</langsyntaxhighlight>
 
=={{header|MAXScript}}==
<syntaxhighlight lang="maxscript">
<lang MAXScript>
fn inSort arr =
(
Line 3,394:
return arr
)
</syntaxhighlight>
</lang>
Output:
<syntaxhighlight lang="maxscript">
<lang MAXScript>
b = for i in 1 to 20 collect random 1 40
#(2, 28, 35, 31, 27, 24, 2, 22, 15, 34, 9, 10, 22, 40, 26, 5, 23, 6, 18, 33)
a = insort b
#(2, 2, 5, 6, 9, 10, 15, 18, 22, 22, 23, 24, 26, 27, 28, 31, 33, 34, 35, 40)
</syntaxhighlight>
</lang>
 
=={{header|ML}}==
==={{header|mLite}}===
{{trans|OCaml}}
<langsyntaxhighlight lang="ocaml">fun insertion_sort L =
let
fun insert
Line 3,420:
 
println ` insertion_sort [6,8,5,9,3,2,1,4,7];
</syntaxhighlight>
</lang>
Output
<pre>
Line 3,427:
 
==={{header|Standard ML}}===
<langsyntaxhighlight lang="sml">fun insertion_sort cmp = let
fun insert (x, []) = [x]
| insert (x, y::ys) =
Line 3,436:
end;
 
insertion_sort Int.compare [6,8,5,9,3,2,1,4,7];</langsyntaxhighlight>
 
=={{header|Modula-3}}==
{{trans|Ada}}
<langsyntaxhighlight lang="modula3">MODULE InsertSort;
 
PROCEDURE IntSort(VAR item: ARRAY OF INTEGER) =
Line 3,455:
END;
END IntSort;
END InsertSort.</langsyntaxhighlight>
 
=={{header|N/t/roff}}==
Line 3,462:
 
===Sliding method===
<langsyntaxhighlight Nlang="n/t/roff">.de end
..
.de array
Line 3,516:
.a.pushln 13 64 22 87 54 87 23 92 11 64 5 9 3 3 0
.insertionsort a
.a.dump</langsyntaxhighlight>
 
===Swapping method===
<langsyntaxhighlight Nlang="n/t/roff">.de end
..
.de array
Line 3,563:
.a.pushln 13 64 22 87 54 87 23 92 11 64 5 9 3 3 0
.insertionsort a
.a.dump</langsyntaxhighlight>
 
=={{header|Nanoquery}}==
{{trans|Python}}
<langsyntaxhighlight Nanoquerylang="nanoquery">def insertion_sort(L)
for i in range(1, len(L) - 1)
j = i - 1
Line 3,579:
 
return L
end</langsyntaxhighlight>
 
=={{header|Nemerle}}==
From the psuedocode.
<langsyntaxhighlight Nemerlelang="nemerle">using System.Console;
using Nemerle.English;
 
Line 3,609:
foreach (i in arr) Write($"$i ");
}
}</langsyntaxhighlight>
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols binary
 
Line 3,659:
 
return ArrayList(A)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,682:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">proc insertSort[T](a: var openarray[T]) =
for i in 1 .. a.high:
let value = a[i]
Line 3,693:
var a = @[4, 65, 2, -31, 0, 99, 2, 83, 782]
insertSort a
echo a</langsyntaxhighlight>
{{out}}
<pre>@[-31, 0, 2, 2, 4, 65, 83, 99, 782]</pre>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
bundle Default {
class Insert {
Line 3,722:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">let rec insert lst x =
match lst with
[] -> [x]
Line 3,734:
let insertion_sort = List.fold_left insert [];;
 
insertion_sort [6;8;5;9;3;2;1;4;7];;</langsyntaxhighlight>
 
=={{header|Oforth}}==
Line 3,740:
Returns a new sorted list.
 
<langsyntaxhighlight Oforthlang="oforth">: insertionSort(a)
| l i j v |
a asListBuffer ->l
Line 3,753:
l put(j 1 +, v)
]
l ;</langsyntaxhighlight>
 
{{out}}
Line 3,764:
=={{header|ooRexx}}==
{{trans|REXX}}
<langsyntaxhighlight lang="oorexx">/* REXX program sorts a stemmed array (has characters) */
/* using the insertion sort algorithm */
Call gen /* fill the array with test data */
Line 3,806:
Say 'Element' right(j,length(x.0)) arg(1)":" x.j
End
Return</langsyntaxhighlight>
{{out}}
<pre>Element 1 before sort: ---Monday's Child Is Fair of Face (by Mother Goose)---
Line 3,832:
=={{header|Oz}}==
Direct translation of pseudocode. In-place sorting of mutable arrays.
<langsyntaxhighlight lang="oz">declare
proc {InsertionSort A}
Low = {Array.low A}
Line 3,852:
in
{InsertionSort Arr}
{Show {Array.toRecord unit Arr}}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">insertionSort(v)={
for(i=1,#v-1,
my(j=i-1,x=v[i]);
Line 3,865:
);
v
};</langsyntaxhighlight>
 
=={{header|Pascal}}==
Line 3,871:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">
sub insertion_sort {
my (@list) = @_;
Line 3,888:
my @a = insertion_sort(4, 65, 2, -31, 0, 99, 83, 782, 1);
print "@a\n";
</syntaxhighlight>
</lang>
{{out}}
-31 0 1 2 4 65 83 99 782
Line 3,894:
=={{header|Phix}}==
Copy of [[Sorting_algorithms/Insertion_sort#Euphoria|Euphoria]]
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">function</span> <span style="color: #000000;">insertion_sort</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">object</span> <span style="color: #000000;">temp</span>
Line 3,914:
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Before: "</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">s</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"After: "</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">insertion_sort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 3,922:
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">function insertionSort(&$arr){
for($i=0;$i<count($arr);$i++){
$val = $arr[$i];
Line 3,936:
$arr = array(4,2,1,6,9,3,8,7);
insertionSort($arr);
echo implode(',',$arr);</langsyntaxhighlight>
<pre>1,2,3,4,6,7,8,9</pre>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(de insertionSort (Lst)
(for (I (cdr Lst) I (cdr I))
(for (J Lst (n== J I) (cdr J))
(T (> (car J) (car I))
(rot J (offset I J)) ) ) )
Lst )</langsyntaxhighlight>
{{out}}
<pre>: (insertionSort (5 3 1 7 4 1 1 20))
Line 3,951:
 
=={{header|PL/I}}==
<langsyntaxhighlight lang="pli">
insert_sort: proc(array);
dcl array(*) fixed bin(31);
Line 3,969:
end;
end insert_sort;
</syntaxhighlight>
</lang>
 
=={{header|PL/M}}==
<langsyntaxhighlight lang="plm">100H:
 
/* INSERTION SORT ON 16-BIT INTEGERS */
Line 4,017:
 
CALL BDOS(0,0);
EOF</langsyntaxhighlight>
{{out}}
<pre>0 1 2 2 3 4 8 31 65 99 782</pre>
Line 4,023:
=={{header|PowerShell}}==
Very similar to the PHP code.
<langsyntaxhighlight lang="powershell">function insertionSort($arr){
for($i=0;$i -lt $arr.length;$i++){
$val = $arr[$i]
Line 4,037:
$arr = @(4,2,1,6,9,3,8,7)
insertionSort($arr)
$arr -join ","</langsyntaxhighlight>
{{Out}}
<pre>1,2,3,4,6,7,8,9</pre>
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">insert_sort(L1,L2) :-
insert_sort_intern(L1,[],L2).
Line 4,055:
!.
insert([H|T],X,[H|T2]) :-
insert(T,X,T2).</langsyntaxhighlight>
% Example use:
Line 4,065:
Works with SWI-Prolog.<br>
Insertion sort inserts elements of a list in a sorted list. So we can use foldl to sort a list.
<langsyntaxhighlight Prologlang="prolog">% insertion sort
isort(L, LS) :-
foldl(insert, [], L, LS).
Line 4,084:
insert([H | T], N, [H|L1]) :-
insert(T, N, L1).
</syntaxhighlight>
</lang>
Example use:
<pre> ?- isort([2,23,42,3,10,1,34,5],L).
Line 4,091:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Procedure insertionSort(Array a(1))
Protected low, high
Protected firstIndex, lastIndex = ArraySize(a())
Line 4,110:
Wend
EndIf
EndProcedure</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">def insertion_sort(L):
for i in xrange(1, len(L)):
j = i-1
Line 4,120:
L[j+1] = L[j]
j -= 1
L[j+1] = key</langsyntaxhighlight>
 
Using pythonic iterators:
 
<langsyntaxhighlight lang="python">def insertion_sort(L):
for i, value in enumerate(L):
for j in range(i - 1, -1, -1):
if L[j] > value:
L[j + 1] = L[j]
L[j] = value</langsyntaxhighlight>
===Insertion sort with binary search===
<langsyntaxhighlight lang="python">def insertion_sort_bin(seq):
for i in range(1, len(seq)):
key = seq[i]
Line 4,145:
up = middle
# insert key at position ``low``
seq[:] = seq[:low] + [key] + seq[low:i] + seq[i + 1:]</langsyntaxhighlight>
 
This is also built-in to the standard library:
 
<langsyntaxhighlight lang="python">import bisect
def insertion_sort_bin(seq):
for i in range(1, len(seq)):
bisect.insort(seq, seq.pop(i), 0, i)</langsyntaxhighlight>
 
=={{header|Qi}}==
Based on the scheme version.
<langsyntaxhighlight lang="qi">(define insert
X [] -> [X]
X [Y|Ys] -> [X Y|Ys] where (<= X Y)
Line 4,166:
 
(insertion-sort [6 8 5 9 3 2 1 4 7])
</syntaxhighlight>
</lang>
 
=={{Header|Quackery}}==
<langsyntaxhighlight Quackerylang="quackery">[ [] swap witheach
[ swap 2dup findwith
[ over > ] [ ]
nip stuff ] ] is insertionsort ( [ --> [ )</langsyntaxhighlight>
 
=={{header|R}}==
Direct translation of pseudocode.
<langsyntaxhighlight lang="r">insertionsort <- function(x)
{
for(i in 2:(length(x)))
Line 4,191:
x
}
insertionsort(c(4, 65, 2, -31, 0, 99, 83, 782, 1)) # -31 0 1 2 4 65 83 99 782</langsyntaxhighlight>
 
R has native vectorized operations which allow the following, more efficient implementation.
 
<syntaxhighlight lang="r">
<lang r>
insertion_sort <- function(x) {
for (j in 2:length(x)) {
Line 4,213:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Racket}}==
This implementation makes use of the pattern matching facilities in the Racket distribution.
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 4,227:
[(cons y rst) (cond [(< x y) (cons x ys)]
[else (cons y (insert x rst))])]))
(foldl insert '() l))</langsyntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line>sub insertion_sort ( @a is copy ) {
for 1 .. @a.end -> $i {
my $value = @a[$i];
Line 4,246:
say 'input = ' ~ @data;
say 'output = ' ~ @data.&insertion_sort;
</syntaxhighlight>
</lang>
 
{{out}}
Line 4,254:
 
=={{header|Rascal}}==
<langsyntaxhighlight lang="rascal">import List;
 
public list[int] insertionSort(a){
Line 4,267:
}
return a;
}</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight lang="rascal">rascal>rascal>insertionSort([4, 65, 2, -31, 0, 99, 83, 782, 1])
list[int]: [-31,0,1,2,4,65,83,99,782]</langsyntaxhighlight>
 
=={{header|REALbasic}}==
<langsyntaxhighlight lang="vb">Sub InsertionSort(theList() as Integer)
for insertionElementIndex as Integer = 1 to UBound(theList)
dim insertionElement as Integer = theList(insertionElementIndex)
Line 4,283:
theList(j + 1) = insertionElement
next
End Sub</langsyntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight lang="rebol">
; This program works with REBOL version R2 and R3, to make it work with Red
; change the word func to function
Line 4,326:
; just by adding the date! type to the local variable value the same function can sort dates.
probe insertion-sort [12-Jan-2015 11-Jan-2015 11-Jan-2016 12-Jan-2014]
</syntaxhighlight>
</lang>
 
{{out}}
Line 4,345:
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX program sorts a stemmed array (has characters) using the insertion sort algorithm*/
call gen /*generate the array's (data) elements.*/
call show 'before sort' /*display the before array elements. */
Line 4,374:
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do j=1 for #; say ' element' right(j,length(#)) arg(1)": " @.j; end; return</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default internal data:}}
<pre>
Line 4,401:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
alist = [7,6,5,9,8,4,3,1,2,0]
see insertionsort(alist)
Line 4,416:
next
return blist
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">class Array
def insertionsort!
1.upto(length - 1) do |i|
Line 4,435:
ary = [7,6,5,9,8,4,3,1,2,0]
p ary.insertionsort!
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</langsyntaxhighlight>
 
Alternative version which doesn't swap elements but rather removes and inserts the value at the correct place:
<langsyntaxhighlight lang="ruby">class Array
def insertionsort!
1.upto(length - 1) do |i|
Line 4,452:
ary = [7,6,5,9,8,4,3,1,2,0]
p ary.insertionsort!
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">dim insSort(100)
sortEnd = 0
global inSort
Line 4,485:
insSort(i) = x
sortEnd = sortEnd + 1
end function</langsyntaxhighlight>
<pre>End Sort:20
1 124
Line 4,503:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">fn insertion_sort<T: std::cmp::Ord>(arr: &mut [T]) {
for i in 1..arr.len() {
let mut j = i;
Line 4,511:
}
}
}</langsyntaxhighlight>
 
=={{header|SASL}}==
Copied from SASL manual, Appendix II, answer (2)(a)
<syntaxhighlight lang="sasl">DEF
<lang SASL>DEF
sort () = ()
sort (a : x) = insert a (sort x)
Line 4,521:
insert a (b : x) = a < b -> a : b : x
b : insert a x
?</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">def insertSort[X](list: List[X])(implicit ord: Ordering[X]) = {
def insert(list: List[X], value: X) = list.span(x => ord.lt(x, value)) match {
case (lower, upper) => lower ::: value :: upper
}
list.foldLeft(List.empty[X])(insert)
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(define (insert x lst)
(if (null? lst)
(list x)
Line 4,547:
(insertion-sort (cdr lst)))))
 
(insertion-sort '(6 8 5 9 3 2 1 4 7))</langsyntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">const proc: insertionSort (inout array elemType: arr) is func
local
var integer: i is 0;
Line 4,565:
arr[j] := help;
end for;
end func;</langsyntaxhighlight>
 
Original source: [http://seed7.sourceforge.net/algorith/sorting.htm#insertionSort]
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">class Array {
method insertion_sort {
{ |i|
Line 4,586:
 
var a = 10.of { 100.irand }
say a.insertion_sort</langsyntaxhighlight>
 
=={{header|SNOBOL4}}==
<langsyntaxhighlight lang="snobol">* read data into an array
A = table()
i = 0
Line 4,608:
* output sorted data
while output = A<i>; i = ?lt(i,aSize) i + 1 :s(while)
end</langsyntaxhighlight>
 
=={{header|Stata}}==
<langsyntaxhighlight lang="stata">mata
void insertion_sort(real vector a) {
real scalar i, j, n, x
Line 4,625:
}
}
end</langsyntaxhighlight>
 
=={{header|Swift}}==
Using generics.
<langsyntaxhighlight Swiftlang="swift">func insertionSort<T:Comparable>(inout list:[T]) {
for i in 1..<list.count {
var j = i
Line 4,638:
}
}
}</langsyntaxhighlight>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">package require Tcl 8.5
 
proc insertionsort {m} {
Line 4,656:
}
 
puts [insertionsort {8 6 4 2 1 3 5 7 9}] ;# => 1 2 3 4 5 6 7 8 9</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
Line 4,683:
 
=={{header|uBasic/4tH}}==
<syntaxhighlight lang="text">PRINT "Insertion sort:"
n = FUNC (_InitArray)
PROC _ShowArray (n)
Line 4,731:
PRINT
RETURN</langsyntaxhighlight>
 
=={{header|UnixPipes}}==
<langsyntaxhighlight lang="bash">selectionsort() {
read a
test -n "$a" && ( selectionsort | sort -nm <(echo $a) -)
}</langsyntaxhighlight>
<syntaxhighlight lang ="bash">cat to.sort | selectionsort</langsyntaxhighlight>
 
=={{header|Ursala}}==
<langsyntaxhighlight Ursalalang="ursala">#import nat
 
insort = ~&i&& @hNCtX ~&r->lx ^\~&rt nleq-~rlrSPrhlPrSCPTlrShlPNCTPQ@rhPlD</langsyntaxhighlight>
test program:
<langsyntaxhighlight Ursalalang="ursala">#cast %nL
 
example = insort <45,82,69,82,104,58,88,112,89,74></langsyntaxhighlight>
{{out}}
<pre>
Line 4,755:
=={{header|Vala}}==
{{trans|Nim}}
<langsyntaxhighlight lang="vala">void insertion_sort(int[] array) {
var count = 0;
for (int i = 1; i < array.length; i++) {
Line 4,773:
foreach (int i in array)
print("%d ", i);
}</langsyntaxhighlight>
{{out}}
<pre>
Line 4,780:
 
=={{header|VBA}}==
{{trans|Phix}}<langsyntaxhighlight lang="vb">Option Base 1
Private Function insertion_sort(s As Variant) As Variant
Dim temp As Variant
Line 4,801:
Debug.Print "Before: ", Join(s, ", ")
Debug.Print "After: ", Join(insertion_sort(s), "' ")
End Sub</langsyntaxhighlight>{{out}}
<pre>Before: 4, 15, delta, 2, -31, 0, alpha, 19, gamma, 2, 13, beta, 782, 1
After: -31' 0' 1' 2' 2' 4' 13' 15' 19' 782' alpha' beta' delta' gamma</pre>
Line 4,807:
=={{header|VBScript}}==
{{trans|REALbasic}}
<langsyntaxhighlight lang="vb">Randomize
Dim n(9) 'nine is the upperbound.
'since VBS arrays are 0-based, it will have 10 elements.
Line 4,843:
Next
End Sub
</syntaxhighlight>
</lang>
{{Out}}
<pre>ORIGINAL : 26699;2643;10249;31612;21346;19702;29799;31115;20413;5197;
Line 4,849:
 
=={{header|Vlang}}==
<langsyntaxhighlight lang="vlang">fn insertion(mut arr []int) {
for i in 1 .. arr.len {
value := arr[i]
Line 4,866:
insertion(mut arr)
println('Output: ' + arr.str())
}</langsyntaxhighlight>
{{out}}
<pre>Input: [4, 65, 2, -31, 0, 99, 2, 83, 782, 1]
Line 4,872:
 
=={{header|Wren}}==
<langsyntaxhighlight lang="ecmascript">var insertionSort = Fn.new { |a|
for (i in 1..a.count-1) {
var v = a[i]
Line 4,890:
System.print("After : %(a)")
System.print()
}</langsyntaxhighlight>
 
{{out}}
Line 4,903:
Alternatively we can just call a library method.
{{libheader|Wren-sort}}
<langsyntaxhighlight lang="ecmascript">import "/sort" for Sort
 
var as = [ [4, 65, 2, -31, 0, 99, 2, 83, 782, 1], [7, 5, 2, 6, 1, 4, 2, 6, 3] ]
Line 4,911:
System.print("After : %(a)")
System.print()
}</langsyntaxhighlight>
 
{{out}}
Line 4,919:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code ChOut=8, IntOut=11;
 
proc InsertionSort(A, L); \Sort array A of length L
Line 4,939:
InsertionSort(A, 10);
for I:= 0 to 10-1 do [IntOut(0, A(I)); ChOut(0, ^ )];
]</langsyntaxhighlight>
 
{{out}}
Line 4,949:
=={{header|Yabasic}}==
{{trans|FreeBASIC}}
<langsyntaxhighlight lang="yabasic">
sub InsertionSort (matriz())
for i = 1 to arraysize(matriz(),1)
Line 4,979:
print
end
</syntaxhighlight>
</lang>
 
 
=={{header|Yorick}}==
Based on pseudocode, except using 1-based arrays.
<langsyntaxhighlight lang="yorick">func insertionSort(&A) {
for(i = 2; i <= numberof(A); i++) {
value = A(i);
Line 4,994:
A(j+1) = value;
}
}</langsyntaxhighlight>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">fcn insertionSort(list){
sink:=List();
foreach x in (list){
Line 5,004:
}
sink.close();
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">insertionSort(T(4,65,2,-31,0,99,2,83,782,1)).println();
insertionSort("big fjords vex quick waltz nymph".split()).println();</langsyntaxhighlight>
{{out}}
<pre>
10,327

edits