March 2014 update

This commit is contained in:
Ingy döt Net 2014-04-02 16:56:35 +00:00
parent 09687c4926
commit a25938f123
1846 changed files with 21876 additions and 5203 deletions

View file

@ -0,0 +1,13 @@
Radix_Sort(data){
loop, parse, data, `,
n := StrLen(A_LoopField)>n?StrLen(A_LoopField):n
loop % n {
bucket := [] , i := A_Index
loop, parse, data, `,
bucket[SubStr(A_LoopField,1-i)] .= (bucket[SubStr(A_LoopField,1-i)]?",":"") A_LoopField
data := ""
for i, v in bucket
data .= (data?",":"") v
}
return data
}

View file

@ -0,0 +1,2 @@
d = 170,45,75,90,802,2,24,66
MsgBox, 262144, , % Radix_Sort(d)

View file

@ -0,0 +1,14 @@
procedure main(A)
every writes((!rSort(A)||" ")|"\n")
end
procedure rSort(A)
every (min := A[1]) >:= !A
every (mlen := *(A[1]-min)) <:= (!A - min)
every i := !*mlen do {
every put(b := [], |[]\12)
every a := !A do put(b[(a-min)[-i]+2|1], a)
every put(A := [],!!b)
}
return A
end

View file

@ -0,0 +1,38 @@
public static int[] sort(int[] old) {
for(int shift = Integer.SIZE-1; shift > -1; shift--) { //Loop for every bit in the integers
int[] tmp = new int[old.length]; //the array to put the partially sorted array into
int j = 0; //The number of 0s
for(int i = 0; i < old.length; i++) { //Move the 0s to the new array, and the 1s to the old one
boolean move = old[i] << shift >= 0; //If there is a 1 in the bit we are testing, the number will be negative
if(shift == 0 ? !move : move) { //If this is the last bit, negative numbers are actually lower
tmp[j] = old[i];
j++;
} else { //It's a 1, so stick it in the old array for now
old[i-j] = old[i];
}
}
for(int i = j; i < tmp.length; i++) { //Copy over the 1s from the old array
tmp[i] = old[i-j];
}
old = tmp; //And now the tmp array gets switched for another round of sorting
}
return old;
}

View file

@ -1,15 +1,16 @@
class Array
def radix_sort(base=10)
ary = dup
rounds = (Math.log(self.max.abs)/Math.log(base)).ceil
rounds = (Math.log(ary.minmax.map(&:abs).max)/Math.log(base)).ceil
rounds.times do |i|
buckets = Hash.new {|h,k| h[k] = []}
buckets = Array.new(2*base){[]}
base_i = base**i
ary.each do |n|
digit = (n/base**i) % base
digit = digit + base unless n<0
digit = (n/base_i) % base
digit += base if 0<=n
buckets[digit] << n
end
ary = buckets.values_at(*(0..2*base)).compact.flatten
ary = buckets.flatten
p [i, ary] if $DEBUG
end
ary