利用冒泡排序对数组进行排序

本文详细介绍了冒泡排序的原理和步骤,通过Java代码展示了冒泡排序的过程,包括基本版本和优化版。优化版通过设置标志位flag减少不必要的比较,提升效率。此外,还探讨了冒泡排序在不同数据状态下的时间复杂度,并提到了局部冒泡排序作为改进策略。
一、冒泡排序:
       利用冒泡排序对数组进行排序
二、基本概念:
       依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 
三、实现思路:
      用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n-1,对于每一个i,j的值依次为0,1,2,...n-i 。
 
    设数组长度为N:
                      1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
                      2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数
Java 中,使用冒泡排序对数进行降序排序,是通过多次比较相邻元素并交换位置来实现的。下面给出不同场景下的实现代码: #### 静态数组降序排序 ```java import java.util.Arrays; public class ArraysTest3 { public static void main(String[] args) { int a[] = new int[]{66, 33, 44, 88, 55}; System.out.println("降序前数组:" + Arrays.toString(a)); for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length - 1; j++) { if (a[j] < a[j + 1]) { int num = a[j]; a[j] = a[j + 1]; a[j + 1] = num; } } } System.out.println("降序后数组:" + Arrays.toString(a)); } } ``` 上述代码对静态定义的数组进行降序排序,通过两层循环比较相邻元素,若前一个元素小于后一个元素,则交换它们的位置,从而实现降序排列[^1]。 #### 动态输入数组降序排序 ```java import java.util.Arrays; import java.util.Scanner; public class Subject06 { public static final Scanner SC = new Scanner(System.in); public static void main(String[] args) { int[] arrs = new int[10]; for (int i = 0; i < arrs.length; i++) { System.out.println("请输入第" + (i + 1) + "个整数"); arrs[i] = SC.nextInt(); } for (int i = 0; i < arrs.length - 1; i++) { for (int j = 0; j < arrs.length - 1 - i; j++) { if (arrs[j] < arrs[j + 1]) { int temp = arrs[j]; arrs[j] = arrs[j + 1]; arrs[j + 1] = temp; } } } for (int i = 0; i < arrs.length; i++) { System.out.print(arrs[i] + " "); } } } ``` 此代码通过 `Scanner` 类从键盘获取用户输入的 10 个整数,存储到数组中,再使用冒泡排序进行降序排序并输出结果[^4]。 #### 随机生成数组降序排序 ```java import java.util.Arrays; import java.util.Random; public class Demo1211 { public static void main(String[] args) { Integer[] arr = new Integer[9]; Random rd = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = rd.nextInt(1, 101); } System.out.println(Arrays.toString(arr)); for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] < arr[j + 1]) { int number = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = number; } } } System.out.println(Arrays.toString(arr)); } } ``` 该代码使用 `Random` 类随机生成 1 到 100 之间的 9 个整数存入数组,然后使用冒泡排序进行降序排序并输出排序前后的数组内容[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值