冒泡排序介绍:
为什么冒泡排序叫做冒泡排序呢?
相信大家一开始都有这个疑问,在冒泡排序的过程中不断地比较数组中相邻的两个元素,较小者向上浮,较大者下沉,整个过程和水中气泡上升的原理相似,故叫冒泡排序。
冒泡排序的过程:
第1步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素 自然就是最大值,这样也就完成了第一轮比较。
第2步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相似, 这样就可以将数组中第2大的数放在倒数第2个位置。
第3步,依此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。
具体案例:
接下来我们通过一个例子来看看:自定义一个数组,然后观察代码实现的过程。
package cn.demo;//按升序冒泡排序算法
import java.util.Scanner;
public class demo0 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入数组的长度:");
int n = sc.nextInt();
int[] number = new int[n];
for(int i = 0;i<number.length;i++)
{
number[i] = sc.nextInt();
}
System.out.print("排序前数组的顺序:");
for(int i = 0;i<number.length;i++)
{
System.out.print(number[i]+" ");
}//自定一个长度的数组进行冒泡排序
System.out.println("");//换行操作
for(int i = 0;i<number.length-1;i++)//外层循环决定比较的轮数
{/*我们定义了一个长度为n数组后,需要对其进行排序,这里的解决方案是
进行n-1轮比较,即每轮比较出一个最大值,使其右移,当n-1轮比较完成后,数组也就排序完成。
*/
for(int j = 0;j<number.length-1-i;j++)
{/*内层循环决定每轮需要比较次数,这取决与第几轮,因为每进行过一轮,数组中的一个数就排好了序,比较次数就少一次
例如在第一轮比较中,还未有数排好位置,需要比较的次数为n-1-i次,其中i=0,表示数组中还未有数排好位置。
*/
if(number[j]>number[j+1])
{
int temp = number[j];
number[j]=number[j+1];
number[j+1] = temp;
}
}
System.out.print("第"+(i+1)+"次排序后:");
for(int j = 0;j<number.length;j++)
{
System.out.print(number[j]+" ");
}
System.out.println("");//用于观察每轮数组排序的结果
}//这个for循环嵌套for循环是此排序的精华所在,注意看注解
System.out.print("排序后的数组:");
for(int i = 0;i<number.length;i++)
{
System.out.print(number[i]+" ");
}//
}
}
//此题可以用方法封装 打印数组的操作以及排序的操作 这样才不会使程序代码变得冗余,修改起来也比较方便。
代码中的关键部分:
for(int i = 0;i<number.length-1;i++)//外层循环决定比较的轮数
{/*我们定义了一个长度为n数组后,需要对其进行排序,这里的解决方案是
进行n-1轮比较,即每轮比较出一个最大值,使其右移,当n-1轮比较完成后,数组也就排序完成。
*/
for(int j = 0;j<number.length-1-i;j++)
{/*内层循环决定每轮需要比较次数,这取决与第几轮,因为每进行过一轮,数组中的一个数就排好了序,比较次数就少一次
例如在第一轮比较中,还未有数排好位置,需要比较的次数为n-1-i次,其中i=0,表示数组中还未有数排好位置。
*/
if(number[j]>number[j+1])
{
int temp = number[j];
number[j]=number[j+1];
number[j+1] = temp;
}
}
System.out.print("第"+(i+1)+"次排序后:");
for(int j = 0;j<number.length;j++)
{
System.out.print(number[j]+" ");
}
System.out.println("");//用于观察每轮数组排序的结果
}//这个for循环嵌套for循环是此排序的精华所在,注意看注解
代码讲解已经在题中注解
如果有疑问,请评论区留言,此账号活跃,会尽快回复。
如果有用的话点个赞再走吧!