This is an animation of the bubble sort algorithm. The random positive numbers to be sorted are represented by red outline circles whose distance from the bottom of the animation frame is proportional to their magnitude. Each circle is ``bubbled'' up to where it belongs in the sorted array by comparing it to the circles on its right. The current circle is changed to solid blue. Each pair of circles being compared is connected briefly by a green line. If the circle on the right is smaller the connecting line is changed to red and the two circles swap positions. Each circle changes to solid black when it moves into its final sorted position.
private static void bubbleSort(int[] a) { // into non-decreasing order for (int i = a.length - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { xa.color("C"+j Color.blue); // make candidate to xa.fill("C"+j xa.SOLID); // bubble solid blue xa.delay(1); // momentarily connect the two icons compared with a line xa.pointLine("temp" scaleX(j) scaleY(a[j]) scaleX(j+1) scaleY(a[j+1]) Color.green xa.THICK); xa.delay(1); if (a[j] > a[j+1]) { // swap the icon locations xa.color("temp" Color.red); xa.delay(1); xa.moveAsync("C"+j scaleX(j+1) scaleY(a[j])); xa.move("C"+(j+1) scaleX(j) scaleY(a[j+1])); xa.swapIds("C"+j C +(j+1)); // swap ids of the icons int temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; } else { xa.fill("C"+j xa.OUTLINE); // make the smaller icon ... xa.color("C"+j Color.red); // ... outline red ... xa.delay(1); xa.color("C"+(j+1) Color.blue); // ... and the larger ... xa.fill("C"+(j+1) xa.SOLID); // ... solid blue xa.delay(1); } xa.delete("temp"); } // color the icon black to indicate it is in final position xa.color("C"+i Color.black); xa.delay(1); } xa.fill("C0" xa.SOLID); xa.delay(1); }At the bottom of the animation window is a button and text field showing the default values of some of the command line arguments. Alter these as needed and click the button.
-n: number of numbers to sort
-r: range of random numbers generated to sort (from 1)
© 1998 Stephen J. Hartley
Permission is granted to copy and distribute this material for educational purposes only, provided that the following credit line is included: "Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley.