首先我们先了解一下什么是冒泡排序
冒泡排序:就是给定一个数组,然后依次从左到右相邻的两个数两两比较,如果是升序排列,如果前面一个数大于后面一个数就交换位置,直到遍历到最后一个,然后进行第二轮的比较,第二轮的比较仍然从第一数开始,进行两两比较,然后进行第三轮,依次类推
下面我们举例来具体阐述一下:
给定一个数组,进行排序:2,6,1,3,8,5从小到大的顺序排列
第一轮:遍历整个数组,相邻两个两两比较,如果前面大于后面,就交换
2,6,1,3,8,5—>2,1,6,3,8,5—》2,1,3,6,8,5—》2,1,3,6,8,5—-》2,1,3,6,5,8
那么第一轮比较就结束了最后的结果:2,1,3,6,5,8
那么我们用代码实现这个过程
在这个之前我们先了解一下Java中数组类型的变量的声明和赋值以及遍历打印
//先定义一个数组,由于数组是对象,所以定义的时候应该new一下 //在定义数组的同时进行快速赋值 int[] num = new int[]{2,6,1,3,8,5}; System.out.println(num);//这里打印只是一个数组的引用的地址 //遍历的方法打印数组 for(int i=0;i<num.length;i++){ System.out.print(num[i]+","); } System.out.println("\n"); //foreach的方法快速打印和遍历数组 //这里的i表示的数组的每一个元素的值,而不是下标 for(int i:num){ System.out.print(i+","); } System.out.println("\n"); //字符数组的声明和遍历打印 String[] str= new String[]{"hello","world"}; for(String i:str){ System.out.println(i+","); }
下面我们实现第一轮
//定义一个数组并进行快速赋值 int[] num = new int[]{2,6,1,3,8,5}; //升序排列 //两两比较 int temp; for(int i=0;i<num.length-1;i++){ //一定要注意我们后面比较的是i和i+1 //所以这里的i的终止条件为num.length-1 //防止溢出 if(num[i]>num[i+1]){ temp=num[i]; num[i]=num[i+1]; num[i+1]=temp; } } for(int i:num){ System.out.print(i+" "); } ---》2 1 3 6 5 8
//定义一个数组并进行快速赋值 int[] num = new int[]{6,5,4,3,2,1}; for(int i:num){ System.out.print(i+" "); } System.out.println("\n"); //升序排列 //两两比较 int temp; int count=0; for(int j=0;j<num.length-1;j++){ //如果将每次循环的结果打印出来我们可以看到 //事实上外层循环只需要num.length-1次就行了 for(int i=0;i<num.length-j-1;i++){ //这里第一轮将最大值移动到了最后, //所以第二轮只需要比较前面五个数就行了 //所以内层循环就是num.length-1 //一定要注意我们后面比较的是i和i+1 //所以这里的i的终止条件为num.length-1 //防止溢出 if(num[i]>num[i+1]){ temp=num[i]; num[i]=num[i+1]; num[i+1]=temp; } } count++; System.out.print("第"+count+"次:"); for(int i:num){ System.out.print(i+" "); } System.out.println("\n"); } 这里我们利用最坏的结果来举例 6 5 4 3 2 1 ,将它从小到大的顺序排列 第1次:5 4 3 2 1 6 第2次:4 3 2 1 5 6 第3次:3 2 1 4 5 6 第4次:2 1 3 4 5 6 第5次:1 2 3 4 5 6
对于冒泡排序我们的思路就是要先写内层循环,然后再写外层循环,内层循环的次数是随着循环的进行而减少的,最后一次我们只需要比较两个数就行了,然后对于外层循环,同样也是只需要length-1就行了,我们可以通过将每次的循环结果打印出来就可以知道
来源:https://www.cnblogs.com/flyingcr/p/10428319.html