xxxxxxxxxx
int[] values;
int[] b0 = new int[100];
int[] b10 = new int[100];
int[] b20 = new int[100];
int[] b30 = new int[100];
int[] b40 = new int[100];
int[] b50 = new int[100];
int[] b60 = new int[100];
int[] b70 = new int[100];
int[] b80 = new int[100];
int[] b90 = new int[100];
int[] b100 = new int[100];
int frame = 0;
void setup() {
fullScreen();
values = new int[100];
for (int i = 0; i < values.length; i++) {
values[i] = (int) floor(random(1, 100));
}
}
void draw() {
background(50);
drawList();
if ((frame + 1) % 60 == 0)
bucketSort(10, values);
frame++;
}
void swap(int indexA, int indexB, int bucket) {
int[] list = new int[100];
if (bucket == 0)
list = b0;
if (bucket == 1)
list = b10;
if (bucket == 2)
list = b20;
if (bucket == 3)
list = b30;
if (bucket == 4)
list = b40;
if (bucket == 5)
list = b50;
if (bucket == 6)
list = b60;
if (bucket == 7)
list = b70;
if (bucket == 8)
list = b80;
if (bucket == 9)
list = b90;
if (bucket == 10)
list = b100;
temp = list[indexA];
list[indexA] = list[indexB];
list[indexB] = temp;
if (bucket == 0)
b0 = list;
if (bucket == 1)
b10 = list;
if (bucket == 2)
b20 = list;
if (bucket == 3)
b30 = list;
if (bucket == 4)
b40 = list;
if (bucket == 5)
b50 = list;
if (bucket == 6)
b60 = list;
if (bucket == 7)
b70 = list;
if (bucket == 8)
b80 = list;
if (bucket == 9)
b90 = list;
if (bucket == 10)
b100 = list;
}
void drawList() {
fill(255);
noStroke();
for (int i = 0; i < values.length; i++) {
float rectHeight = values[i] * height / values.length;
float rectWidth = width / (values.length - 1);
rect((i - 1) * rectWidth, height - rectHeight, rectWidth, rectHeight);
}
}
void addToBucket(int v, int bucketClass) {
switch (bucketClass) {
case 0:
b0[b0.length] = v;
break;
case 1:
b10[b10.length] = v;
break;
case 2:
b20[b20.length] = v;
break;
case 3:
b30[b30.length] = v;
break;
case 4:
b40[b40.length] = v;
break;
case 5:
b50[b50.length] = v;
break;
case 6:
b60[b60.length] = v;
break;
case 7:
b70[b70.length] = v;
break;
case 8:
b80[b80.length] = v;
break;
case 9:
b90[b90.length] = v;
break;
case 10:
b100[b100.length] = v;
break;
}
}
void resetBuckets() {
b0 = new int[100];
b10 = new int[100];
b20 = new int[100];
b30 = new int[100];
b40 = new int[100];
b50 = new int[100];
b60 = new int[100];
b70 = new int[100];
b80 = new int[100];
b90 = new int[100];
b100 = new int[100];
}
void sorted(int[] list) {
oldval = -Infinity;
for (int i = 0; i < list.length: i++) {
val = list[i];
if (val < oldval)
return false;
}
return true;
}
void insertionSort(int bucket) {
int[] list = new int[100];
if (bucket == 0)
list = b0;
if (bucket == 1)
list = b10;
if (bucket == 2)
list = b20;
if (bucket == 3)
list = b30;
if (bucket == 4)
list = b40;
if (bucket == 5)
list = b50;
if (bucket == 6)
list = b60;
if (bucket == 7)
list = b70;
if (bucket == 8)
list = b80;
if (bucket == 9)
list = b90;
if (bucket == 10)
list = b100;
while (!sorted(list)) {
for (int i = 0; i < list.length-1; i++) {
int j = i;
while (list[j] > list[j+1]) {
swap(j, j+1, bucket);
j++;
}
}
}
if (bucket == 0)
b0 = list;
if (bucket == 1)
b10 = list;
if (bucket == 2)
b20 = list;
if (bucket == 3)
b30 = list;
if (bucket == 4)
b40 = list;
if (bucket == 5)
b50 = list;
if (bucket == 6)
b60 = list;
if (bucket == 7)
b70 = list;
if (bucket == 8)
b80 = list;
if (bucket == 9)
b90 = list;
if (bucket == 10)
b100 = list;
}
void bucketSort(int divisor) {
resetBuckets();
for (int i = 0; i < values.length; i++) {
int v = values[i];
int bucketClass = (int) v / divisor;
addToBucket(v, bucketClass);
}
if (divisor == 10) {
for (int i = 0; i < 10; i++)
insertionSort(i);
}
int[] sortedList = new int[values.length];
int j = 0;
for (int i = 0; i < b0.length; i++)
sortedList[j] = b0[i]; j++;
for (int i = 0; i < b10.length; i++)
sortedList[j] = b10[i]; j++;
for (int i = 0; i < b20.length; i++)
sortedList[j] = b20[i]; j++;
for (int i = 0; i < b30.length; i++)
sortedList[j] = b30[i]; j++;
for (int i = 0; i < b40.length; i++)
sortedList[j] = b40[i]; j++;
for (int i = 0; i < b50.length; i++)
sortedList[j] = b50[i]; j++;
for (int i = 0; i < b60.length; i++)
sortedList[j] = b60[i]; j++;
for (int i = 0; i < b70.length; i++)
sortedList[j] = b70[i]; j++;
for (int i = 0; i < b80.length; i++)
sortedList[j] = b80[i]; j++;
for (int i = 0; i < b90.length; i++)
sortedList[j] = b90[i]; j++;
for (int i = 0; i < b100.length; i++)
sortedList[j] = b100[i]; j++;
values = sortedList;
}