冒泡排序(Bubble Sort),是一种比较简单的排序算法。在冒泡排序算法中,需要重复的走访要排序的数列,一次比较两个元素,如果它们的大小顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换的元素,也就是说该数列已经排序完成。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
本案例要求使用冒泡排序算法实现对数组的排序。有一个长度为10的整型数组,使用冒泡排序算法将数组按照升序排列,并输出排序的过程以及结果。程序交互情况如图所示:
为了理解冒泡排序算法,我们先假设有一个长度为7的数组,数组内容如图所示:
上图中的数组元素为无序状态,为实现升序排列,可以先进行第一轮比较,过程大致如下:
1.先比较第一对相邻的元素(第一个位置的89和第二个位置的50):如果第一个比第二个大,就交换两个数值;
2.继续比较第二对相邻的元素(第二个位置和第三个位置):如果第二个位置上的数值大于第三个位置上的数值,则交换;
3.继续下去,重复上述的比较工作,直到结尾的最后一对;此时,一轮比较交换完成后,最后的元素则是数列中最大的数。
第一轮比较的过程如图所示:
由上图可以看出,第一轮比较后,已经将数组中的最大值通过位置交换,移动到数组的最后位置上。但是,其余的元素依然为无序状态,因此,依然进行第二轮比较:针对除最后一个元素外的其他元素重复以上步骤,以找到剩余元素中的最大数,且放置到倒数第二的位置上。第二轮比较的过程如图所示:
由上图可以看出,第一个位置上的50比第二个位置上的84小,因此不发生交换;而其他位置将依次发生变换,从而将84交换到倒数第二的位置上。
然后,继续进行其他轮比较,持续进行,每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较,则排序完成。整个排序的过程如图所示:
由上图可以看出,实现冒泡排序算法时,需要使用嵌套的两个循环来实现:外层循环用于控制排序的轮次,里层循环用于控制每轮排序中的两两交互。
实现此案例需要按照如下步骤进行。
首先定义一个名为BubbleSort的类,并在类中添加Java应用程序的主方法main,代码如下所示:
public class BubbleSort{
public static void main(String[] args){
}
}
在main方法中创建一个长度为10的数组,并使用for语句构建一个10次的循环,在每次循环中,随机产生一个0到99之间的整数,并存入数组,然后,打印数组的内容显示在界面上。
此案例中,使用Random类的nextInt()方法产生随机数。代码如下所示:
import java.util.Random;
import java.util.Arrays;
public class BubbleSort{
public static void main(String[] args){
//创建数组
int[] arr=new int[10];
Random ran=new Random();
for(int i=0;i
注意:此步骤中,需要导入java.util包下的Random类和Arrays类。
使用冒泡排序算法对数组进行排序:每一轮比较中,两两相比,找到更大的数值移动到最后,直到都比较过一遍。为便于查看排序的过程,将每轮比较后的数组内容输出显示,并将最后的结果输出到控制台。代码如下所示:
import java.util.Random;
import java.util.Arrays;
public class BubbleSort{
public static void main(String[] args){
//创建数组
int[] arr=new int[10];
Random ran=new Random();
for(int i=0;i