Java之冒泡排序

举报
兮动人 发表于 2021/10/11 10:57:10 2021/10/11
【摘要】 Java之冒泡排序

排序的介绍

  • 排序是将多个数据,依指定的顺序进行排列的过程。

1. 排序的分类:

  1. 内部排序:
    指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择
    式排序法和插入式排序法);
  2. 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

2. 冒泡排序法

  • 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
    在这里插入图片描述

3. 冒泡排序法案例:

BubbleSort.java

  • 下面我们举一个具体的案例来说明冒泡法。我们将五个无序:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。
  • 图像分析:
    在这里插入图片描述

思路:

  • 化繁为简,先死后活
	数组 [24,69,80,57,13]1轮排序: 目标把最大数放在最后
	第1次比较[24,69,80,57,13]2次比较[24,69,80,57,13]3次比较[24,69,57,80,13]4次比较[24,69,57,13,80]
	int[] arr = {24, 69, 80, 57, 13};
	int temp = 0; //用于辅助交换的变量

	for( int j = 0; j < 4; j++) {//4次比较
      	//如果前面的数>后面的数,就交换
      	if(arr[j] > arr[j + 1]) {
      		temp = arr[j];
      		arr[j] = arr[j+1];
      		arr[j+1] = temp;  
      	}
      }

      System.out.println("==第1轮==");
      for(int j = 0; j < arr.length; j++) {
      	System.out.print(arr[j] + "\t");
      }
      /*
      第2轮排序: 目标把第二大数放在倒数第二位置
      第1次比较[24,69,57,13,80]
      第2次比较[24,57,69,13,80]
      第3次比较[24,57,13,69,80]
       */

      for( int j = 0; j < 3; j++) {//3次比较
      	//如果前面的数>后面的数,就交换
      	if(arr[j] > arr[j + 1]) {
      		temp = arr[j];
      		arr[j] = arr[j+1];
      		arr[j+1] = temp;  
      	}
      }

      System.out.println("\n==第2轮==");
      for(int j = 0; j < arr.length; j++) {
      	System.out.print(arr[j] + "\t");
      }


      //第3轮排序: 目标把第3大数放在倒数第3位置
      //第1次比较[24,57,13,69,80]
      //第2次比较[24,13,57,69,80]


      for( int j = 0; j < 2; j++) {//2次比较
      	//如果前面的数>后面的数,就交换
      	if(arr[j] > arr[j + 1]) {
      		temp = arr[j];
      		arr[j] = arr[j+1];
      		arr[j+1] = temp;  
      	}
      }

      System.out.println("\n==第3轮==");
      for(int j = 0; j < arr.length; j++) {
      	System.out.print(arr[j] + "\t");
      }

      /*
      第4轮排序: 目标把第4大数放在倒数第4位置
      第1次比较[13,24,57,69,80]
       */

      for( int j = 0; j < 1; j++) {//1次比较
      	//如果前面的数>后面的数,就交换
      	if(arr[j] > arr[j + 1]) {
      		temp = arr[j];
      		arr[j] = arr[j+1];
      		arr[j+1] = temp;  
      	}
      }

      System.out.println("\n==第4轮==");
      for(int j = 0; j < arr.length; j++) {
      	System.out.print(arr[j] + "\t");
      }

在这里插入图片描述

  • 将多轮排序使用外层循环包括起来即可
    先死后活 => 4就是 arr.length - 1
	int[] arr = {24, 69, 80, 57, 13};
		int temp = 0; //用于辅助交换的变量

		//将多轮排序使用外层循环包括起来即可
		//先死后活 =》 4就是 arr.length - 1
	for( int i = 0; i < arr.length - 1; i++) {//外层循环是4次
	
		for( int j = 0; j < arr.length - 1 - i; j++) {//4次比较-3次-2次-1次
			//如果前面的数>后面的数,就交换
			if(arr[j] > arr[j + 1]) {
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;  
			}
		}
		System.out.println("\n==第"+(i+1)+"轮==");
		for(int j = 0; j < arr.length; j++) {
			System.out.print(arr[j] + "\t");
		}
	
	}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。