原理:
从第一位开始,依次比较相邻的两个元素,如果右边比左边大,则交换位置,需要注意每轮结束后,序列中最后一个值一定是最大的,所以从第n+1轮开始比较次数依次递减1。
图片展示:
依次类推
代码实现:
public static void main(String args[]) {
int a[] = new int[]{344, 566, 888, 6, 345, 23, 456, 34, 5, 78, 45, 100};
int temp;//做为中间变量交换数据;
//冒泡排序
for (int i = 0; i < a.length - 1; i++) {
/*
* 注意:a.length-1是因为比较最后一位元素时,
* 已经没有与其比较的值,小心数组越界,-i是每经够i轮,比较次数减i
* */
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1]; //交换元素
a[j + 1] = temp;
}
}
for (int s = 0; s < a.length; s++) {
System.out.print(a[s] + " ");
}
System.out.println();
}
}
运行结果:
344 566 6 345 23 456 34 5 78 45 100 888
344 6 345 23 456 34 5 78 45 100 566 888
6 344 23 345 34 5 78 45 100 456 566 888
6 23 344 34 5 78 45 100 345 456 566 888
6 23 34 5 78 45 100 344 345 456 566 888
6 23 5 34 45 78 100 344 345 456 566 888
6 5 23 34 45 78 100 344 345 456 566 888
5 6 23 34 45 78 100 344 345 456 566 888
5 6 23 34 45 78 100 344 345 456 566 888
5 6 23 34 45 78 100 344 345 456 566 888
5 6 23 34 45 78 100 344 345 456 566 888
本人初次学习,如有错误请指正,谢谢。
参考: https://www.sunofbeach.net/a/1244622772110438400