circularSort
in
Programming Questions
•
1 year ago
is it possible to visualize all steps of the quicksort process and not only the final?
int[] num= {
10, 3, 14, 8, 12, 5, 6, 7, 4, 15, 14, 8, 47, 38, 11, 125, 73, 55, 41, 1, 0
};
int minimum;
int maximum;
void setup() {
minimum=num[0];
maximum=num[0];
for (int m=0; m < num.length; m++) {
if (num[m]>maximum) {
maximum=num[m];
}
if (num[m]<minimum) {
minimum=num[m];
}
}
size(550, 550);
smooth();
noLoop();
}
void draw() {
quicksort(num, 0, num.length-1);
}
int partition(int x[], int left, int right) {
int i = left;
int j = right;
int temp;
int pivot = x[(left+right)/2];
while (i <= j) {
while (x[i] < pivot) {
i++;
}
while (x[j] > pivot) {
j--;
}
if (i <= j) {
temp = x[i];
x[i] = x[j];
x[j] = temp;
i++;
j--;
vis(x);
}
}
return i;
}
void vis(int[] vis) {
for (int y=0; y<vis.length; y++) {
float colour = map(vis[y], minimum, maximum, minimum, 255-minimum);
float angle = map(vis[y], minimum, maximum, 5, TWO_PI-5);
strokeWeight((map(vis[y], minimum, maximum, 1, 10)));
float r=vis[y]*(maximum/(minimum+1));
float r1= map(r, 0, (sq(maximum))/(minimum+1), 0, 500);
if (vis[y]<((minimum+maximum)/2)) {
pushMatrix();
translate(width/2, height/2);
noFill();
stroke(colour);
rotate(angle*random(0.1, 1));
arc(0, 0, r1, r1, 0, angle);
popMatrix();
}
else {
pushMatrix();
translate(width/2, height/2);
noFill();
stroke(colour);
arc(0, 0, r1, r1, 0, angle);
popMatrix();
}
}
}
void quicksort(int x[], int left, int right) {
background(0);
int index = partition(x, left, right);
if (left < index - 1) {
quicksort(x, left, index-1);
}
if (index < right) {
quicksort(x, index, right);
}
}
1