package com.links.algorithm;
/**
* 冒泡算法展示
*
* @author:albert_zhengwei
* @date:2020年11月4日
*/
public class AlgoDubbleSort {
public static void main(String[] args) {
/**
* 冒泡排序: 依次(从左到右或者从右到左)比较相邻两个元素的大小,根据需求(从大到小或者从小到大)交换两个元素的位置,直至没有任何
* 一对数据需要进行比较。
* 1,依次(从左到右或者从右到左)比较相邻的两个元素,如果第一个大于(小于)第二个,就交换他们的位置
* 2,依次对相邻的元素进行上面的工作,从第一对到最后一对元素,此步骤最后一个元素将会变成最大(最小)值
* 3,重复执行以上步骤,剔除最后一个元素的比较(已知是最大值或者最小值,不需要再比较)
* 4,按如上步骤重复执行,会越来越少的元素进行比较,直至没有元素可以进行比较,则排序结束
*/
// 定义一组数据进行排序
int arr[] = {17, 13,24,12,25,51};
//创建StringBuilder对象,拼接数组中的元素,以逗号分隔
StringBuilder sBuilder = new StringBuilder();
//循环输出数组元素
for (int x :arr) {
sBuilder.append(x).append(",");
}
System.out.println("初始数组排列结果为:"+sBuilder.toString().substring(0, sBuilder.toString().length()-1));
/**
* 一共需要比较arr.length-1次
*/
for (int i = 0; i < arr.length - 1; i++) {
/**
* 循环比较的次数 假设一共n个元素比较,相邻元素一对一对的比较,一共需要比较n-1次 第1次比较,比较元素次数为 n-1,
* 最后一个元素会变成最大值(最小值) 第2次比较,比较元素的次数为n-2,倒数第二个元素会变成第二大(小)值 ...
*/
for (int j = 0; j < arr.length - 1 - i; j++) {
// 按照从小到大排列,比较第j个元素和第j+1个元素
// if (arr[j] >= arr[j + 1]) {
// // 如果第j个元素大于等于第j+1个元素,将第j+1个元素赋值给临时变量
// int temp = arr[j + 1];
// // 将第j个元素值赋值给j+1个元素
// arr[j + 1] = arr[j];
// // 将临时变量值赋值给第j个元素
// arr[j] = temp;
// }
// 按照从大到小排列,比较第j个元素和第j+1个元素
if (arr[j] <= arr[j + 1]) {
// 如果第j个元素大于等于第j+1个元素,将第j+1个元素赋值给临时变量
int temp = arr[j];
// 将第j个元素值赋值给j+1个元素
arr[j] = arr[j+1];
// 将临时变量值赋值给第j个元素
arr[j+1] = temp;
}
}
//清空sBuilder对象内容
sBuilder.delete(0, sBuilder.toString().length());
//循环输出数组元素
for (int x :arr) {
sBuilder.append(x).append(",");
}
System.out.println("第"+(i+1)+"次排列结果为:"+sBuilder.toString().substring(0, sBuilder.toString().length()-1));
}
}
}
按照从大到小排列输出结果为:
初始数组排列结果为:17,13,24,12,25,51
第1次排列结果为:17,24,13,25,51,12
第2次排列结果为:24,17,25,51,13,12
第3次排列结果为:24,25,51,17,13,12
第4次排列结果为:25,51,24,17,13,12
第5次排列结果为:51,25,24,17,13,12