Just another update

This commit is contained in:
Ingy döt Net 2015-02-20 00:35:01 -05:00
parent a25938f123
commit 00a190b0a6
6591 changed files with 94363 additions and 23227 deletions

View file

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

View file

@ -0,0 +1,17 @@
ClearAll[SortByPos, RadixSort]
SortByPos[data : {_List ..}, pos_Integer] := Module[{digs, order},
digs = data[[All, pos]];
order = Ordering[digs];
data[[order]]
]
RadixSort[x : {_Integer ..}] := Module[{y, digs, maxlen, offset},
offset = Min[x];
y = x - offset;
digs = IntegerDigits /@ y;
maxlen = Max[Length /@ digs];
digs = IntegerDigits[#, 10, maxlen] & /@ y;
digs = Fold[SortByPos, digs, -Range[maxlen]];
digs = FromDigits /@ digs;
digs += offset;
digs
]

View file

@ -0,0 +1,2 @@
RadixSort[{170,45,75,-90,-802,24,2,66}]
RadixSort[{170,45,75,90,802,2,24,66}]