/**
* @author ku_tu
* @version 1.0
*
* //冒泡排序
* //调试心得
* 1.模拟冒泡的比较过程,才能更好地理解
* 2.想要最小的"冒泡"序列的出现最左边,内层循环就---是最小的数从最后向"最左前"冒泡出来,即从最后的数字开始
* <p>
* 代码层面
* 1..外层控制---比较<轮>次---len-1---1.防止越界 2.最后一个不用排序了,因为最后一个自己出来了
* 2.内层循环控制-----每<轮>比较的次数
* <p>
* *
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {1, 40, 3, 4, 5, 6};
Sort sort = new Sort();
sort.maopaoSort(arr);
for (int a : arr) {
System.out.print(a + " ");
}
}
}
class Sort {
//冒泡排序
//数组
void maopaoSort(int[] arr) {
//----------------使最大的数从最向右边"冒泡"--动画效果------------
// int t = 0;
// for (int j = 0; j < arr.length-1; j++) {//外层控制比较轮次
// for(int i=0;i< arr.length-i-1;i++)
// if (arr[i] > arr[i + 1]) {
// t = arr[i + 1];
// arr[i + 1] = arr[i];
// arr[i] = t;
// }
// }
//----最终优化版------------使最小的数从最向左边"冒泡"--动画效果------------
int len = arr.length;
int t = 0;
boolean exchange;
for (int j = 0; j < len - 1; j++) {//外层控制比较轮次---len-1---1.防止越界 2.最后一个不用排序了,因为最后一个自己出来了
exchange = false;
for (int i = len - 1; i > j; i--)//内层循环控制每轮比较的次数
if (arr[i] < arr[i - 1]) {
t = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = t;
exchange = true;
}
if (!exchange) { //如果 在第i轮(某轮次)中, 没有发生交换,中途结束算法
return;
}
}
}
}