Java冒泡排序算法的实现
- 冒泡排序:英文是Bubble Sort,是一种最基础的交换排序。
- 方法:在一个无序数组中,相邻的两个元素进行比较,如果前面的元素数值比后面的元素数值大,则将它们两个进行交换,直到整个数组是按照从小到大的顺序进行排列。
代码实现:
/*
需求:
键盘输入数组的长度,以及数组的各个元素,对数组进行冒泡排序
一般数组需要排序(数组长度-1)轮,但是有可能会提前完成排序
所以在算法中加入了判断,如果元素没有发生交换,就认为已经完成排序
*/
import java.util.Scanner;
class BubbleSort{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示用户输入数组长度并记录
System.out.print("请输入数组长度:");
int length = sc.nextInt();
//动态初始化一个int类型的数组
int[] array = new int[length];
//使用for循环录入数组各个元素
for(int i = 0; i < length; i++){
System.out.print("请输入数组索引值为" + i + "的元素值:");
array[i] = sc.nextInt();
}
System.out.println("排序前的数组");
//调用方法对排序前的数组进行遍历
printArray(array);
//调用冒泡排序方法
bubbleSort(array);
}
//定义一个遍历数组的方法
//输出格式为[元素1, 元素2, 元素3, ..., 元素n]
public static void printArray(int[] arr){
//首先输出[
System.out.print("[");
//使用for循环对数组进行遍历
for(int i = 0; i < arr.length; i++){
//判断当前元素是否为数组最后一个元素
if(i == arr.length - 1){
System.out.print(arr[i] + "]");
}else{
System.out.print(arr[i] + ", ");
}
}
}
//冒泡排序算法的代码
public static void bubbleSort(int[] arr){
for(int i = 0; i < arr.length - 1; i++){
//定义一个boolean类型的变量记录元素是否发生交换
boolean isExchange = true;
for(int j = 0; j < arr.length - 1 - i; j++){
//判断相邻两个元素的大小
if(arr[j] > arr[j + 1]){
//如果发生变量交换,则将isExchange变为false
isExchange = false;
//定义一个中间变量,辅助交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
//如果循环中没有元素发生交换,则表示数组已经排好序,可以跳出循环
if (isExchange){
System.out.println("\n排序提前完成。");
break;
}
//每一轮排序完后对数组进行遍历输出
System.out.println("\n第" + (i + 1) + "轮排序后数组情况");
printArray(arr);
}
}
}