all tasks

This commit is contained in:
Ingy döt Net 2013-04-11 01:07:29 -07:00
parent b83f433714
commit 68f8f3e56b
14735 changed files with 178959 additions and 0 deletions

View file

@ -0,0 +1,19 @@
{{Sorting Algorithm}}
{{wikipedia|Insertion sort}}
An <span style="font-family: serif">[[O]](''n''<sup>2</sup>)</span> sorting algorithm which moves elements one at a time into the correct position. The algorithm consists of inserting one element at a time into the previously sorted part of the array, moving higher ranked elements up as necessary. To start off, the first (or smallest, or any arbitrary) element of the unsorted array is considered to be the sorted part.
Although insertion sort is an <span style="font-family: serif">[[O]](''n''<sup>2</sup>)</span> algorithm, its simplicity, low overhead, good locality of reference and efficiency make it a good choice in two cases (i) small <span style="font-family: serif">''n''</span>, (ii) as the final finishing-off algorithm for <span style="font-family: serif">[[O]](''n'' log''n'')</span> algorithms such as [[Merge sort|mergesort]] and [[quicksort]].
The algorithm is as follows (from [[wp:Insertion_sort#Algorithm|wikipedia]]):
'''function''' ''insertionSort''(array A)
'''for''' i '''from''' 1 '''to''' length[A]-1 '''do'''
value := A[i]
j := i-1
'''while''' j >= 0 '''and''' A[j] > value '''do'''
A[j+1] := A[j]
j := j-1
'''done'''
A[j+1] = value
'''done'''
Writing the algorithm for integers will suffice.

View file

@ -0,0 +1,2 @@
---
note: Sorting Algorithms

View file

@ -0,0 +1,12 @@
(defun insert (x xs)
(cond ((endp xs) (list x))
((< x (first xs))
(cons x xs))
(t (cons (first xs)
(insert x (rest xs))))))
(defun isort (xs)
(if (endp xs)
nil
(insert (first xs)
(isort (rest xs)))))

View file

@ -0,0 +1,25 @@
MODE DATA = REF CHAR;
PROC in place insertion sort = (REF[]DATA item)VOID:
BEGIN
INT first := LWB item;
INT last := UPB item;
INT j;
DATA value;
FOR i FROM first + 1 TO last DO
value := item[i];
j := i - 1;
# WHILE j >= LWB item AND j <= UPB item ANDF item[j] > value DO // example of ANDF extension #
WHILE ( j >= LWB item AND j <= UPB item | item[j]>value | FALSE ) DO # no extension! #
item[j + 1] := item[j];
j -:= 1
OD;
item[j + 1] := value
OD
END # in place insertion sort #;
[32]CHAR data := "big fjords vex quick waltz nymph";
[UPB data]DATA ref data; FOR i TO UPB data DO ref data[i] := data[i] OD;
in place insertion sort(ref data);
FOR i TO UPB ref data DO print(ref data[i]) OD; print(new line);
print((data))

View file

@ -0,0 +1,18 @@
{
line[NR] = $0
}
END { # sort it with insertion sort
for(i=1; i <= NR; i++) {
value = line[i]
j = i - 1
while( ( j > 0) && ( line[j] > value ) ) {
line[j+1] = line[j]
j--
}
line[j+1] = value
}
#print it
for(i=1; i <= NR; i++) {
print line[i]
}
}

View file

@ -0,0 +1,15 @@
function insertionSort(array:Array)
{
for(var i:int = 1; i < array.length;i++)
{
var value = array[i];
var j:int = i-1;
while(j >= 0 && array[j] > value)
{
array[j+1] = array[j];
j--;
}
array[j+1] = value;
}
return array;
}

View file

@ -0,0 +1,18 @@
type Data_Array is array(Natural range <>) of Integer;
procedure Insertion_Sort(Item : in out Data_Array) is
First : Natural := Item'First;
Last : Natural := Item'Last;
Value : Integer;
J : Integer;
begin
for I in (First + 1)..Last loop
Value := Item(I);
J := I - 1;
while J in Item'range and then Item(J) > Value loop
Item(J + 1) := Item(J);
J := J - 1;
end loop;
Item(J + 1) := Value;
end loop;
end Insertion_Sort;

View file

@ -0,0 +1,17 @@
MsgBox % InsertionSort("")
MsgBox % InsertionSort("xxx")
MsgBox % InsertionSort("3,2,1")
MsgBox % InsertionSort("dog,000000,xx,cat,pile,abcde,1,cat,zz,xx,z")
InsertionSort(var) { ; SORT COMMA SEPARATED LIST
StringSplit a, var, `, ; make array, size = a0
Loop % a0-1 {
i := A_Index+1, v := a%i%, j := i-1
While j>0 and a%j%>v
u := j+1, a%u% := a%j%, j--
u := j+1, a%u% := v
}
Loop % a0 ; construct string from sorted array
sorted .= "," . a%A_Index%
Return SubStr(sorted,2) ; drop leading comma
}

View file

@ -0,0 +1,30 @@
DECLARE SUB InsertionSort (theList() AS INTEGER)
DIM n(10) AS INTEGER, L AS INTEGER, o AS STRING
FOR L = 0 TO 10
n(L) = INT(RND * 32768)
NEXT
InsertionSort n()
FOR L = 1 TO 10
PRINT n(L); ";";
NEXT
SUB InsertionSort (theList() AS INTEGER)
DIM insertionElementIndex AS INTEGER
FOR insertionElementIndex = 1 TO UBOUND(theList)
DIM insertionElement AS INTEGER
insertionElement = theList(insertionElementIndex)
DIM j AS INTEGER
j = insertionElementIndex - 1
DO WHILE (j >= 0)
'necessary for BASICs without short-circuit evaluation
IF (insertionElement < theList(j)) THEN
theList(j + 1) = theList(j)
j = j - 1
ELSE
EXIT DO
END IF
LOOP
theList(j + 1) = insertionElement
NEXT
END SUB

View file

@ -0,0 +1,21 @@
DIM test(9)
test() = 4, 65, 2, -31, 0, 99, 2, 83, 782, 1
PROCinsertionsort(test(), 10)
FOR i% = 0 TO 9
PRINT test(i%) ;
NEXT
PRINT
END
DEF PROCinsertionsort(a(), n%)
LOCAL i%, j%, t
FOR i% = 1 TO n%-1
t = a(i%)
j% = i%
WHILE j%>0 AND t<a(ABS(j%-1))
a(j%) = a(j%-1)
j% -= 1
ENDWHILE
a(j%) = t
NEXT
ENDPROC

View file

@ -0,0 +1,8 @@
#include <algorithm>
template<typename Iter>
void insertion_sort(Iter beg, Iter end)
{
for (Iter i = beg; i != end; ++i)
std::rotate(std::upper_bound(beg, i, *i), i, i+1);
}

View file

@ -0,0 +1,19 @@
#include <stddef.h>
static void insertion_sort(int *a, const size_t n) {
size_t i, j;
int value;
for (i = 1; i < n; i++) {
value = a[i];
for (j = i; j > 0 && value < a[j - 1]; j--) {
a[j] = a[j - 1];
}
a[j] = value;
}
}
int main(void) {
int a[] = {4, 65, 2, -31, 0, 99, 2, 83, 782, 1};
insertion_sort(a, sizeof a / sizeof a[0]);
return 0;
}

View file

@ -0,0 +1,31 @@
# insertion_sort(var [value1 value2...]) sorts a list of integers.
function(insertion_sort var)
math(EXPR last "${ARGC} - 1") # Sort ARGV[1..last].
foreach(i RANGE 2 ${last})
# Extend the sorted area to ARGV[1..i].
set(b ${i})
set(v ${ARGV${b}})
# Insert v == ARGV[b] in sorted order. While b > 1, check if b is
# too high, then decrement b. After loop, set ARGV[b] = v.
while(b GREATER 1)
math(EXPR a "${b} - 1")
set(u ${ARGV${a}})
# Now u == ARGV[a]. Pretend v == ARGV[b]. Compare.
if(u GREATER ${v})
# ARGV[a] and ARGV[b] are in wrong order. Fix by moving ARGV[a]
# to ARGV[b], making room for later insertion of v.
set(ARGV${b} ${u})
else()
break()
endif()
math(EXPR b "${b} - 1")
endwhile()
set(ARGV${b} ${v})
endforeach(i)
set(answer)
foreach(i RANGE 1 ${last})
list(APPEND answer ${ARGV${i}})
endforeach(i)
set("${var}" "${answer}" PARENT_SCOPE)
endfunction(insertion_sort)

View file

@ -0,0 +1,2 @@
insertion_sort(result 33 11 44 22 66 55)
message(STATUS "${result}") # -- 11;22;33;44;55;66

View file

@ -0,0 +1,27 @@
C-PROCESS SECTION.
PERFORM E-INSERTION VARYING WB-IX-1 FROM 1 BY 1
UNTIL WB-IX-1 > WC-SIZE.
...
E-INSERTION SECTION.
E-000.
MOVE WB-ENTRY(WB-IX-1) TO WC-TEMP.
SET WB-IX-2 TO WB-IX-1.
PERFORM F-PASS UNTIL WB-IX-2 NOT > 1 OR
WC-TEMP NOT < WB-ENTRY(WB-IX-2 - 1).
IF WB-IX-1 NOT = WB-IX-2
MOVE WC-TEMP TO WB-ENTRY(WB-IX-2).
E-999.
EXIT.
F-PASS SECTION.
F-000.
MOVE WB-ENTRY(WB-IX-2 - 1) TO WB-ENTRY(WB-IX-2).
SET WB-IX-2 DOWN BY 1.
F-999.
EXIT.

View file

@ -0,0 +1,9 @@
(defn in-sort! [data]
(letfn [(insert ([raw x](insert [] raw x))
([sorted [y & raw] x]
(if (nil? y) (conj sorted x)
(if (<= x y ) (concat sorted [x,y] raw)
(recur (conj sorted y) raw x )))))]
(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]

View file

@ -0,0 +1,13 @@
(defun span (predicate list)
(let ((tail (member-if-not predicate list)))
(values (ldiff list tail) tail)))
(defun less-than (x)
(lambda (y) (< y x)))
(defun insert (list elt)
(multiple-value-bind (left right) (span (less-than elt) list)
(append left (list elt) right)))
(defun insertion-sort (list)
(reduce #'insert list :initial-value nil))

View file

@ -0,0 +1,15 @@
void insertionSort(T)(T[] data) pure nothrow {
foreach (i, value; data[1 .. $]) {
auto j = i + 1;
for ( ; j > 0 && value < data[j - 1]; j--)
data[j] = data[j - 1];
data[j] = value;
}
}
void main() {
import std.stdio;
auto items = [28, 44, 46, 24, 19, 2, 17, 11, 25, 4];
items.insertionSort();
writeln(items);
}

View file

@ -0,0 +1,50 @@
program TestInsertionSort;
{$APPTYPE CONSOLE}
{.$DEFINE DYNARRAY} // remove '.' to compile with dynamic array
type
TItem = Integer; // declare ordinal type for array item
{$IFDEF DYNARRAY}
TArray = array of TItem; // dynamic array
{$ELSE}
TArray = array[0..15] of TItem; // static array
{$ENDIF}
procedure InsertionSort(var A: TArray);
var
I, J: Integer;
Item: TItem;
begin
for I:= 1 + Low(A) to High(A) do begin
Item:= A[I];
J:= I - 1;
while (J >= Low(A)) and (A[J] > Item) do begin
A[J + 1]:= A[J];
Dec(J);
end;
A[J + 1]:= Item;
end;
end;
var
A: TArray;
I: Integer;
begin
{$IFDEF DYNARRAY}
SetLength(A, 16);
{$ENDIF}
for I:= Low(A) to High(A) do
A[I]:= Random(100);
for I:= Low(A) to High(A) do
Write(A[I]:3);
Writeln;
InsertionSort(A);
for I:= Low(A) to High(A) do
Write(A[I]:3);
Writeln;
Readln;
end.

View file

@ -0,0 +1,17 @@
procedure InsertionSort(var S: string);
var
I, J, L: Integer;
Ch: Char;
begin
L:= Length(S);
for I:= 2 to L do begin
Ch:= S[I];
J:= I - 1;
while (J > 0) and (S[J] > Ch) do begin
S[J + 1]:= S[J];
Dec(J);
end;
S[J + 1]:= Ch;
end;
end;

View file

@ -0,0 +1,11 @@
def insertionSort(array) {
for i in 1..!(array.size()) {
def value := array[i]
var j := i-1
while (j >= 0 && array[j] > value) {
array[j + 1] := array[j]
j -= 1
}
array[j+1] := value
}
}

View file

@ -0,0 +1,4 @@
? 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()

View file

@ -0,0 +1,32 @@
class
MY_SORTED_SET [G -> COMPARABLE]
inherit
TWO_WAY_SORTED_SET [G]
redefine
sort
end
create
make
feature
sort
-- Insertion sort
local
l_j: INTEGER
l_value: like item
do
across 2 |..| count as ii loop
from
l_j := ii.item - 1
l_value := Current.i_th (ii.item)
until
l_j < 1 or Current.i_th (l_j) <= l_value
loop
Current.i_th (l_j + 1) := Current.i_th (l_j)
l_j := l_j - 1
end
Current.i_th (l_j + 1) := l_value
end
end
end

View file

@ -0,0 +1,44 @@
(defun min-or-max-of-2-numbers (n1 n2 rel)
"n1 and n2 are two numbers, rel can be '< or '> according to
what sort of sorting is wanted, this function returns the greater
or smaller number n1 or n2"
(cond
((eval (list rel n1 n2)) n1)
(t n2)))
(defun min-or-max-of-a-list (lon rel)
"lon is a list of numbers, rel is '< or '>, this fonction
returns the higher or lower number of the list"
(if (cdr lon)
(min-or-max-of-2-numbers (car lon)
(min-or-max-of-a-list (cdr lon) rel)
rel)
(car lon)))
(defun remove-number-from-list (n lon)
"lon is a list of numbers, n is a number belonging to the list,
this function returns the same list but the number n. If n is
present twice or more, it will be removed only once"
(if lon
(cond
((= (car lon) n) (cdr lon))
(t (cons (car lon) (remove-number-from-list n (cdr lon)))))
nil))
(defun sort-insertion (lon rel)
"lon is a list of numbers, rel can be '< or '>, this function
returns a list containing the same elements but which is sorted
according to rel"
(if lon
(cons (min-or-max-of-a-list lon rel)
(sort-insertion
(remove-number-from-list
(min-or-max-of-a-list lon rel)
lon)
rel))
nil))
;;; let's try it :
(sort-insertion (list 1 2 3 9 8 7 25 12 3 2 1) '>)

View file

@ -0,0 +1,8 @@
-module(sort).
-export([insertion/1]).
insertion(L) -> lists:foldl(fun insert/2, [], L).
insert(X,[]) -> [X];
insert(X,L=[H|_]) when X =< H -> [X|L];
insert(X,[H|T]) -> [H|insert(X, T)].

View file

@ -0,0 +1,4 @@
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]

View file

@ -0,0 +1,22 @@
function insertion_sort(sequence s)
object temp
integer j
for i = 2 to length(s) do
temp = s[i]
j = i-1
while j >= 1 and compare(s[j],temp) > 0 do
s[j+1] = s[j]
j -= 1
end while
s[j+1] = temp
end for
return s
end function
include misc.e
constant s = {4, 15, "delta", 2, -31, 0, "alfa", 19, "gamma", 2, 13, "beta", 782, 1}
puts(1,"Before: ")
pretty_print(1,s,{2})
puts(1,"\nAfter: ")
pretty_print(1,insertion_sort(s),{2})

View file

@ -0,0 +1,18 @@
: insert ( start end -- start )
dup @ >r ( r: v ) \ v = a[i]
begin
2dup < \ j>0
while
r@ over cell- @ < \ a[j-1] > v
while
cell- \ j--
dup @ over cell+ ! \ a[j] = a[j-1]
repeat then
r> swap ! ; \ a[j] = v
: sort ( array len -- )
1 ?do dup i cells + insert loop drop ;
create test 7 , 3 , 0 , 2 , 9 , 1 , 6 , 8 , 4 , 5 ,
test 10 sort
test 10 cells dump

View file

@ -0,0 +1,15 @@
PURE SUBROUTINE Insertion_Sort(a)
REAL, INTENT(in out), DIMENSION(:) :: a
REAL :: temp
INTEGER :: i, j
DO i = 2, SIZE(a)
j = i - 1
temp = a(i)
DO WHILE (j>=1 .AND. a(j)>temp)
a(j+1) = a(j)
j = j - 1
END DO
a(j+1) = temp
END DO
END SUBROUTINE Insertion_Sort

View file

@ -0,0 +1,7 @@
DO i = 2, SIZE(a)
j = i - 1
DO WHILE (j>=1 .AND. a(j) > a(i))
j = j - 1
END DO
a(j+1:i) = cshift(a(j+1:i),-1)
END DO

View file

@ -0,0 +1,14 @@
SUBROUTINE SORT(N,A)
IMPLICIT NONE
INTEGER N,I,J
DOUBLE PRECISION A(N),X
DO 30 I=2,N
X=A(I)
J=I
10 J=J-1
IF(J.EQ.0 .OR. A(J).LE.X) GO TO 20
A(J+1)=A(J)
GO TO 10
20 A(J+1)=X
30 CONTINUE
END

View file

@ -0,0 +1,18 @@
InsertionSort := function(L)
local n, i, j, x;
n := Length(L);
for i in [ 2 .. n ] do
x := L[i];
j := i - 1;
while j >= 1 and L[j] > x do
L[j + 1] := L[j];
j := j - 1;
od;
L[j + 1] := x;
od;
end;
s := "BFKRIMPOQACNESWUTXDGLVZHYJ";
InsertionSort(s);
s;
# "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

View file

@ -0,0 +1,23 @@
package main
import "fmt"
func insertionSort(a []int) {
for i := 1; i < len(a); i++ {
value := a[i]
j := i - 1
for j >= 0 && a[j] > value {
a[j+1] = a[j]
j = j - 1
}
a[j+1] = value
}
}
func main() {
list := []int{31, 41, 59, 26, 53, 58, 97, 93, 23, 84}
fmt.Println("unsorted:", list)
insertionSort(list)
fmt.Println("sorted! ", list)
}

View file

@ -0,0 +1,22 @@
package main
import (
"fmt"
"sort"
)
func insertionSort(a sort.Interface) {
for i := 1; i < a.Len(); i++ {
for j := i; j > 0 && a.Less(j, j-1); j-- {
a.Swap(j-1, j)
}
}
}
func main() {
list := []int{31, 41, 59, 26, 53, 58, 97, 93, 23, 84}
fmt.Println("unsorted:", list)
insertionSort(sort.IntSlice(list))
fmt.Println("sorted! ", list)
}

View file

@ -0,0 +1,23 @@
package main
import (
"fmt"
"sort"
)
func insertionSort(a []int) {
for i := 1; i < len(a); i++ {
value := a[i]
j := sort.Search(i, func(k int) bool { return a[k] > value })
copy(a[j+1:i+1], a[j:i])
a[j] = value
}
}
func main() {
list := []int{31, 41, 59, 26, 53, 58, 97, 93, 23, 84}
fmt.Println("unsorted:", list)
insertionSort(list)
fmt.Println("sorted! ", list)
}

View file

@ -0,0 +1,13 @@
def insertionSort = { list ->
def size = list.size()
(1..<size).each { i ->
def value = list[i]
def j = i - 1
for (; j >= 0 && list[j] > value; j--) {
print "."; list[j+1] = list[j]
}
print "."; list[j+1] = value
}
list
}

View file

@ -0,0 +1,2 @@
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]))

View file

@ -0,0 +1,8 @@
import Data.List (insert)
insertionSort :: Ord a => [a] -> [a]
insertionSort = foldr insert []
-- Example use:
-- *Main> insertionSort [6,8,5,9,3,2,1,4,7]
-- [1,2,3,4,5,6,7,8,9]

View file

@ -0,0 +1,12 @@
DO i = 2, LEN(A)
value = A(i)
j = i - 1
1 IF( j > 0 ) THEN
IF( A(j) > value ) THEN
A(j+1) = A(j)
j = j - 1
GOTO 1 ! no WHILE in HicEst
ENDIF
ENDIF
A(j+1) = value
ENDDO

View file

@ -0,0 +1,17 @@
procedure main() #: demonstrate various ways to sort a list and string
demosort(insertionsort,[3, 14, 1, 5, 9, 2, 6, 3],"qwerty")
end
procedure insertionsort(X,op) #: return sorted X
local i,temp
op := sortop(op,X) # select how and what we sort
every i := 2 to *X do {
temp := X[j := i]
while op(temp,X[1 <= (j -:= 1)]) do
X[j+1] := X[j]
X[j+1] := temp
}
return X
end

View file

@ -0,0 +1,17 @@
List do(
insertionSortInPlace := method(
for(j, 1, size - 1,
key := at(j)
i := j - 1
while(i >= 0 and at(i) > key,
atPut(i + 1, at(i))
i = i - 1
)
atPut(i + 1, key)
)
)
)
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)

View file

@ -0,0 +1,13 @@
List do(
insertionSortInPlace := method(
# In fact, we could've done slice(1, size - 1) foreach(...)
# but creating a new list in memory can only make it worse.
foreach(idx, key,
newidx := slice(0, idx) map(x, x > key) indexOf(true)
if(newidx, insertAt(removeAt(idx), newidx))
)
self)
)
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)

View file

@ -0,0 +1 @@
isort=:((>: # ]) , [ , < #])/

View file

@ -0,0 +1,2 @@
isort 32 4 1 34 95 3 2 120 _38
_38 1 2 3 4 32 34 95 120

View file

@ -0,0 +1,11 @@
public static void insertSort(int[] A){
for(int i = 1; i < A.length; i++){
int value = A[i];
int j = i - 1;
while(j >= 0 && A[j] > value){
A[j + 1] = A[j];
j = j - 1;
}
A[j + 1] = value;
}
}

View file

@ -0,0 +1,14 @@
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);
Collections.rotate(a.subList(j, i+1), j - i);
}
}
public static <E extends Comparable<? super E>> void insertionSort(E[] a) {
for (int i = 1; i < a.length; i++) {
E x = a[i];
int j = Math.abs(Arrays.binarySearch(a, 0, i, x) + 1);
System.arraycopy(a, j, a, j+1, i-j);
a[j] = x;
}
}

View file

@ -0,0 +1,13 @@
function insertionSort (a) {
for (var i = 0; i < a.length; i++) {
var k = a[i];
for (var j = i; j > 0 && k < a[j - 1]; j--)
a[j] = a[j - 1];
a[j] = k;
}
return a;
}
var a = [4, 65, 2, -31, 0, 99, 83, 782, 1];
insertionSort(a);
document.write(a.join(" "));

View file

@ -0,0 +1,31 @@
itemCount = 20
dim A(itemCount)
for i = 1 to itemCount
A(i) = int(rnd(1) * 100)
next i
print "Before Sort"
gosub [printArray]
'--- Insertion sort algorithm
for i = 2 to itemCount
value = A(i)
j = i-1
while j >= 0 and A(j) > value
A(j+1) = A(j)
j = j-1
wend
A(j+1) = value
next
'--- end of (Insertion sort algorithm)
print "After Sort"
gosub [printArray]
end
[printArray]
for i = 1 to itemCount
print using("###", A(i));
next i
print
return

View file

@ -0,0 +1,16 @@
function bins(tb, val, st, en)
local st, en = st or 1, en or #tb
local mid = math.floor((st + en)/2)
if en == st then return tb[st] > val and st or st+1
else return tb[mid] > val and bins(tb, val, st, mid) or bins(tb, val, mid+1, en)
end
end
function isort(t)
local ret = {t[1], t[2]}
for i = 3, #t do
table.insert(ret, bins(ret, t[i]), t[i])
end
return ret
end
print(unpack(isort{4,5,2,7,8,3}))

View file

@ -0,0 +1,16 @@
function list = insertionSort(list)
for i = (2:numel(list))
value = list(i);
j = i - 1;
while (j >= 1) && (list(j) > value)
list(j+1) = list(j);
j = j-1;
end
list(j+1) = value;
end %for
end %insertionSort

View file

@ -0,0 +1,5 @@
>> insertionSort([4 3 1 5 6 2])
ans =
1 2 3 4 5 6

View file

@ -0,0 +1,7 @@
insertionSort[a_List] := Module[{A = a},
For[i = 2, i <= Length[A], i++,
value = A[[i]]; j = i - 1;
While[j >= 1 && A[[j]] > value, A[[j + 1]] = A[[j]]; j--;];
A[[j + 1]] = value;];
A
]

View file

@ -0,0 +1,12 @@
insertion_sort(u) := block(
[n: length(u), x, j],
for i from 2 thru n do (
x: u[i],
j: i - 1,
while j >= 1 and u[j] > x do (
u[j + 1]: u[j],
j: j - 1
),
u[j + 1]: x
)
)$

View file

@ -0,0 +1,16 @@
MODULE InsertSort;
PROCEDURE IntSort(VAR item: ARRAY OF INTEGER) =
VAR j, value: INTEGER;
BEGIN
FOR i := FIRST(item) + 1 TO LAST(item) DO
value := item[i];
j := i - 1;
WHILE j >= FIRST(item) AND item[j] > value DO
item[j + 1] := item[j];
DEC(j);
END;
item[j + 1] := value;
END;
END IntSort;
END InsertSort.

View file

@ -0,0 +1,27 @@
using System.Console;
using Nemerle.English;
module InsertSort
{
public static Sort(this a : array[int]) : void
{
mutable value = 0; mutable j = 0;
foreach (i in [1 .. (a.Length - 1)])
{
value = a[i]; j = i - 1;
while (j >= 0 and a[j] > value)
{
a[j + 1] = a[j];
j = j - 1;
}
a[j + 1] = value;
}
}
Main() : void
{
def arr = array[1, 4, 8, 3, 8, 3, 5, 2, 6];
arr.Sort();
foreach (i in arr) Write($"$i ");
}
}

View file

@ -0,0 +1,47 @@
/* NetRexx */
options replace format comments java crossref savelog symbols binary
import java.util.List
placesList = [String -
"UK London", "US New York", "US Boston", "US Washington" -
, "UK Washington", "US Birmingham", "UK Birmingham", "UK Boston" -
]
lists = [ -
placesList -
, insertionSort(String[] Arrays.copyOf(placesList, placesList.length)) -
]
loop ln = 0 to lists.length - 1
cl = lists[ln]
loop ct = 0 to cl.length - 1
say cl[ct]
end ct
say
end ln
return
method insertionSort(A = String[]) public constant binary returns String[]
rl = String[A.length]
al = List insertionSort(Arrays.asList(A))
al.toArray(rl)
return rl
method insertionSort(A = List) public constant binary returns ArrayList
loop i_ = 1 to A.size - 1
value = A.get(i_)
j_ = i_ - 1
loop label j_ while j_ >= 0
if (Comparable A.get(j_)).compareTo(Comparable value) <= 0 then leave j_
A.set(j_ + 1, A.get(j_))
j_ = j_ - 1
end j_
A.set(j_ + 1, value)
end i_
return ArrayList(A)

View file

@ -0,0 +1,9 @@
let rec insert x = function
[] -> [x]
| y :: ys ->
if x <= y then x :: y :: ys
else y :: insert x ys
;;
let insertion_sort lst = List.fold_right insert lst [];;
insertion_sort [6;8;5;9;3;2;1;4;7];;

View file

@ -0,0 +1,23 @@
bundle Default {
class Insert {
function : Main(args : String[]) ~ Nil {
values := [9, 7, 10, 2, 9, 7, 4, 3, 10, 2, 7, 10];
InsertionSort(values);
each(i : values) {
values[i]->PrintLine();
};
}
function : InsertionSort (a : Int[]) ~ Nil {
each(i : a) {
value := a[i];
j := i - 1;
while(j >= 0 & a[j] > value) {
a[j + 1] := a[j];
j -= 1;
};
a[j + 1] := value;
};
}
}
}

View file

@ -0,0 +1,21 @@
declare
proc {InsertionSort A}
Low = {Array.low A}
High = {Array.high A}
in
for I in Low+1..High do
Value = A.I
J = {NewCell I-1}
in
for while:@J >= Low andthen A.@J > Value do
A.(@J+1) := A.@J
J := @J - 1
end
A.(@J+1) := Value
end
end
Arr = {Tuple.toArray unit(3 1 4 1 5 9 2 6 5)}
in
{InsertionSort Arr}
{Show {Array.toRecord unit Arr}}

View file

@ -0,0 +1,11 @@
insertionSort(v)={
for(i=1,#v-1,
my(j=i-1,x=v[i]);
while(j && v[j]>x,
v[j+1]=v[j];
j--
);
v[j+1]=x
);
v
};

View file

@ -0,0 +1,15 @@
function insertionSort(&$arr){
for($i=0;$i<count($arr);$i++){
$val = $arr[$i];
$j = $i-1;
while($j>=0 && $arr[$j] > $val){
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$j+1] = $val;
}
}
$arr = array(4,2,1,6,9,3,8,7);
insertionSort($arr);
echo implode(',',$arr);

View file

@ -0,0 +1,16 @@
INSSORT: PROCEDURE (A);
DCL A(*) FIXED BIN(31);
DCL (I, J, V, N) FIXED BIN(31);
N = HBOUND(A,1); M = LBOUND(A,1);
DO I=M+1 TO N;
V=A(I);
J=I-1;
DO WHILE (J > M-1);
if A(J) <= V then leave;
A(J+1)=A(J); J=J-1;
END;
A(J+1)=V;
END;
RETURN;
END INSSORT;

View file

@ -0,0 +1,15 @@
sub insertion_sort ( @a is copy ) {
for 1 .. @a.end -> $i {
my $value = @a[$i];
my $j;
loop ( $j = $i-1; $j >= 0 and @a[$j] > $value; $j-- ) {
@a[$j+1] = @a[$j];
}
@a[$j+1] = $value;
}
return @a;
}
my @data = 22, 7, 2, -5, 8, 4;
say 'input = ' ~ @data;
say 'output = ' ~ @data.&insertion_sort;

View file

@ -0,0 +1,16 @@
sub insertion_sort {
my (@list) = @_;
foreach my $i (1 .. $#list) {
my $j = $i;
my $k = $list[$i];
while ( $j > 0 && $k < $list[$j - 1]) {
$list[$j] = $list[$j - 1];
$j--;
}
$list[$j] = $k;
}
return @list;
}
my @a = insertion_sort(4, 65, 2, -31, 0, 99, 83, 782, 1);
print "@a\n";

View file

@ -0,0 +1,6 @@
(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 )

View file

@ -0,0 +1,14 @@
insert_sort(L1,L2) :-
insert_sort_intern(L1,[],L2).
insert_sort_intern([],L,L).
insert_sort_intern([H|T],L1,L) :-
insert(L1,H,L2),
insert_sort_intern(T,L2,L).
insert([],X,[X]).
insert([H|T],X,[X,H|T]) :-
X =< H,
!.
insert([H|T],X,[H|T2]) :-
insert(T,X,T2).

View file

@ -0,0 +1,19 @@
% insertion sort
isort(L, LS) :-
foldl(insert, [], L, LS).
% foldl(Pred, Init, List, R).
foldl(_Pred, Val, [], Val).
foldl(Pred, Val, [H | T], Res) :-
call(Pred, Val, H, Val1),
foldl(Pred, Val1, T, Res).
% insertion in a sorted list
insert([], N, [N]).
insert([H | T], N, [N, H|T]) :-
N =< H, !.
insert([H | T], N, [H|L1]) :-
insert(T, N, L1).

View file

@ -0,0 +1,20 @@
Procedure insertionSort(Array a(1))
Protected low, high
Protected firstIndex, lastIndex = ArraySize(a())
If lastIndex > firstIndex + 1
low = firstIndex + 1
While low <= lastIndex
high = low
While high > firstIndex
If a(high) < a(high - 1)
Swap a(high), a(high - 1)
Else
Break
EndIf
high - 1
Wend
low + 1
Wend
EndIf
EndProcedure

View file

@ -0,0 +1,8 @@
def insertion_sort(l):
for i in xrange(1, len(l)):
j = i-1
key = l[i]
while (l[j] > key) and (j >= 0):
l[j+1] = l[j]
j -= 1
l[j+1] = key

View file

@ -0,0 +1,15 @@
def insertion_sort_bin(seq):
for i in range(1, len(seq)):
key = seq[i]
# invariant: ``seq[:i]`` is sorted
# find the least `low' such that ``seq[low]`` is not less then `key'.
# Binary search in sorted sequence ``seq[low:up]``:
low, up = 0, i
while up > low:
middle = (low + up) // 2
if seq[middle] < key:
low = middle + 1
else:
up = middle
# insert key at position ``low``
seq[:] = seq[:low] + [key] + seq[low:i] + seq[i + 1:]

View file

@ -0,0 +1,4 @@
import bisect
def insertion_sort_bin(seq):
for i in range(1, len(seq)):
bisect.insort(seq, seq.pop(i), 0, i)

View file

@ -0,0 +1,10 @@
(define insert
X [] -> [X]
X [Y|Ys] -> [X Y|Ys] where (<= X Y)
X [Y|Ys] -> [Y|(insert X Ys)])
(define insertion-sort
[] -> []
[X|Xs] -> (insert X (insertion-sort Xs)))
(insertion-sort [6 8 5 9 3 2 1 4 7])

View file

@ -0,0 +1,16 @@
insertionsort <- function(x)
{
for(i in 2:(length(x)))
{
value <- x[i]
j <- i - 1
while(j >= 1 && x[j] > value)
{
x[j+1] <- x[j]
j <- j-1
}
x[j+1] <- value
}
x
}
insertionsort(c(4, 65, 2, -31, 0, 99, 83, 782, 1)) # -31 0 1 2 4 65 83 99 782

View file

@ -0,0 +1,11 @@
Sub InsertionSort(theList() as Integer)
for insertionElementIndex as Integer = 1 to UBound(theList)
dim insertionElement as Integer = theList(insertionElementIndex)
dim j as Integer = insertionElementIndex - 1
while (j >= 0) and (insertionElement < theList(j))
theList(j + 1) = theList(j)
j = j - 1
wend
theList(j + 1) = insertionElement
next
End Sub

View file

@ -0,0 +1,38 @@
/*REXX program sorts a stemmed array using the insertion-sort method.*/
call gen@ /*generate the array's elements. */
call show@ 'before sort' /*show the before array elements.*/
call insertionSort highItem /*invoke the insertion sort. */
call show@ ' after sort' /*show the after array elements.*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────GEN@ subroutine─────────────────────*/
gen@: @.= /*assign default value to array. */
@.1 = "---Monday's Child Is Fair of Face (by Mother Goose)---"
@.2 = "Monday's child is fair of face;"
@.3 = "Tuesday's child is full of grace;"
@.4 = "Wednesday's child is full of woe;"
@.5 = "Thursday's child has far to go;"
@.6 = "Friday's child is loving and giving;"
@.7 = "Saturday's child works hard for a living;"
@.8 = "But the child that is born on the Sabbath day"
@.9 = "Is blithe and bonny, good and gay."
do highItem=1 while @.highItem\=='' /*find how many entries in array.*/
end /*short and sweet DO loop, eh? */
highItem=highItem-1 /*because of DO, adjust highItem.*/
return
/*──────────────────────────────────INSERTIONSORT subroutine────────────*/
insertionSort: procedure expose @.; parse arg highItem
do i=2 to highItem; value=@.i
do j=i-1 by -1 while j\==0 & @.j>value
jp=j+1; @.jp=@.j
end /*j*/
jp=j+1
@.jp=value
end /*i*/
return
/*──────────────────────────────────SHOW@ subroutine────────────────────*/
show@: widthH=length(highItem) /*the maximum width of any line. */
do j=1 for highItem
say 'element' right(j,widthH) arg(1)': ' @.j
end /*j*/
say copies('',79) /*show a separator line that fits*/
return

View file

@ -0,0 +1,13 @@
(require racket/match)
(define (sort pred l)
(define (insert x y)
(match (list x y)
[(list x '()) (list x)]
[(list x (cons y ys))
(if (pred x y)
(cons x (cons y ys))
(cons y (f x ys)))]))
(match l
['() '()]
[(cons x xs) (insert x (sort pred xs))]))

View file

@ -0,0 +1,14 @@
import List;
public list[int] insertionSort(a){
for(i <- [0..size(a)-1]){
v = a[i];
j = i-1;
while(j >= 0 && a[j] > v){
a[j+1] = a[j];
j -= 1;
}
a[j+1] = v;
}
return a;
}

View file

@ -0,0 +1,2 @@
rascal>rascal>insertionSort([4, 65, 2, -31, 0, 99, 83, 782, 1])
list[int]: [-31,0,1,2,4,65,83,99,782]

View file

@ -0,0 +1,17 @@
class Array
def insertionsort!
1.upto(length - 1) do |i|
value = self[i]
j = i - 1
while j >= 0 and self[j] > value
self[j+1] = self[j]
j -= 1
end
self[j+1] = value
end
self
end
end
ary = [7,6,5,9,8,4,3,1,2,0]
ary.insertionsort!
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

View file

@ -0,0 +1,17 @@
class Array
def insertionsort!
return if length < 2
1.upto(length - 1) do |i|
value = delete_at i
j = i - 1
j -= 1 while j >= 0 && value < self[j]
insert(j + 1, value)
end
self
end
end
ary = [7,6,5,9,8,4,3,1,2,0]
ary.insertionsort!
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

View file

@ -0,0 +1,31 @@
dim insSort(100)
sortEnd = 0
global inSort
global sortEnd
' -- insert some random numbers --
for i = 1 to 20
a = int(1000 * rnd(1))
x = insertSort(a)
next i
' --- Print the Sorted Data -----
print "End Sort:";sortEnd ' number sorted
for i = 1 to sortEnd
print i;" ";insSort(i) ' location and sorted data
next i
wait
function insertSort(x) ' Insert Sort Function
i = 1
while x > insSort(i) and i <= sortEnd
i = i + 1
wend
for j = sortEnd to i step -1
insSort(j + 1) = insSort(j)
next j
insSort(i) = x
sortEnd = sortEnd + 1
end function

View file

@ -0,0 +1,20 @@
* read data into an array
A = table()
i = 0
readln A<i = i + 1> = trim(input) :s(readln)
aSize = i - 1
* sort array
i = 1
loop1 value = A<i>
j = i - 1
loop2 gt(j,0) gt(A<j>,value) :f(done2)
A<j + 1> = A<j>
j = j - 1 :(loop2)
done2 A<j + 1> = value
i = ?lt(i,aSize) i + 1 :s(loop1)
i = 1
* output sorted data
while output = A<i>; i = ?lt(i,aSize) i + 1 :s(while)
end

View file

@ -0,0 +1,4 @@
def insert(list: List[Int], value: Int) = list.span(_ < value) match {
case (lower, upper) => lower ::: value :: upper
}
def insertSort(list: List[Int]) = list.foldLeft(List[Int]())(insert)

View file

@ -0,0 +1,16 @@
(define (insert x lst)
(if (null? lst)
(list x)
(let ((y (car lst))
(ys (cdr lst)))
(if (<= x y)
(cons x lst)
(cons y (insert x ys))))))
(define (insertion-sort lst)
(if (null? lst)
'()
(insert (car lst)
(insertion-sort (cdr lst)))))
(insertion-sort '(6 8 5 9 3 2 1 4 7))

View file

@ -0,0 +1,16 @@
const proc: insertionSort (inout array elemType: arr) is func
local
var integer: i is 0;
var integer: j is 0;
var elemType: help is elemType.value;
begin
for i range 2 to length(arr) do
j := i;
help := arr[i];
while j > 1 and arr[pred(j)] > help do
arr[j] := arr[pred(j)];
decr(j);
end while;
arr[j] := help;
end for;
end func;

View file

@ -0,0 +1,10 @@
fun insertion_sort cmp = let
fun insert (x, []) = [x]
| insert (x, y::ys) =
case cmp (x, y) of GREATER => y :: insert (x, ys)
| _ => x :: y :: ys
in
foldl insert []
end;
insertion_sort Int.compare [6,8,5,9,3,2,1,4,7];

View file

@ -0,0 +1,16 @@
package require Tcl 8.5
proc insertionsort {m} {
for {set i 1} {$i < [llength $m]} {incr i} {
set val [lindex $m $i]
set j [expr {$i - 1}]
while {$j >= 0 && [lindex $m $j] > $val} {
lset m [expr {$j + 1}] [lindex $m $j]
incr j -1
}
lset m [expr {$j + 1}] $val
}
return $m
}
puts [insertionsort {8 6 4 2 1 3 5 7 9}] ;# => 1 2 3 4 5 6 7 8 9

View file

@ -0,0 +1,4 @@
selectionsort() {
read a
test -n "$a" && ( selectionsort | sort -nm <(echo $a) -)
}

View file

@ -0,0 +1 @@
cat to.sort | selectionsort

View file

@ -0,0 +1,3 @@
#import nat
insort = ~&i&& @hNCtX ~&r->lx ^\~&rt nleq-~rlrSPrhlPrSCPTlrShlPNCTPQ@rhPlD

View file

@ -0,0 +1,3 @@
#cast %nL
example = insort <45,82,69,82,104,58,88,112,89,74>

View file

@ -0,0 +1,21 @@
code ChOut=8, IntOut=11;
proc InsertionSort(A, L); \Sort array A of length L
int A, L;
int I, J, V;
[for I:= 1 to L-1 do
[V:= A(I);
J:= I-1;
while J>=0 and A(J)>V do
[A(J+1):= A(J);
J:= J-1;
];
A(J+1):= V;
];
];
int A, I;
[A:= [3, 1, 4, 1, -5, 9, 2, 6, 5, 4];
InsertionSort(A, 10);
for I:= 0 to 10-1 do [IntOut(0, A(I)); ChOut(0, ^ )];
]

View file

@ -0,0 +1,11 @@
func insertionSort(&A) {
for(i = 2; i <= numberof(A); i++) {
value = A(i);
j = i - 1;
while(j >= 1 && A(j) > value) {
A(j+1) = A(j);
j--;
}
A(j+1) = value;
}
}