March 2014 update
This commit is contained in:
parent
09687c4926
commit
a25938f123
1846 changed files with 21876 additions and 5203 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
d = 170,45,75,90,802,2,24,66
|
||||
MsgBox, 262144, , % Radix_Sort(d)
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue