先看一下排序的输出效果:
经典冒泡排序是有轮和次的概念:
一轮中要比较元素个数(n)-轮数-1这么多次;
单次只比较其中两个数。轮数为:元素个数-1
见上面例子,设计了最恶劣的情况。
即:
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
如:第一轮第一次就交换了3、4的位置,第二次交换4、2,第三次交换了4、1,这样一轮下来最后一个是最大的。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
即,比较到下个数n-轮数的位置。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
下面是完整代码
package cn;
import java.util.Scanner;
/**************************************************
*功 能:
*时 间:2022/4/7 9:48
*作 者:R
*更新描述:
**************************************************/
public class BubbleSorting {
public static void main(String[] args) {
int n = 1;
int temp = 0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入数组元素个数:");
n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {//录入数据
System.out.println("请输入第" + (i + 1) + "个数:");
int data = scan.nextInt();
arr[i] = data;
}
System.out.println("排序前的数组为:");
for (int data : arr) { //遍历数组 输出,检验数据是否输对
System.out.printf(data + "\t");
}
System.out.println();
System.out.println("由小到大排序后的数组为:");
for (int i = 0; i < arr.length-1; i++) { //控制交换的轮数,为n
for (int j = 0; j < arr.length - 1-i; j++) {//控制每次交换的具体元素
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int data : arr) {
System.out.print(data + "\t");
}
}
}
用户可通过按键自定义数组长度:
经典的交换数据的方式:用一个临时变量来接收数据