最近刚进一家公司,业务不太忙,因此我就有些许空闲时间,来学点新的东西或者复习旧的东西了。最大感觉,国内很多计算机教材,里面的理论概念
超级繁琐,我简直一页都看不下去了。个别不错的书籍,看的整体感觉还挺好的。还有,知识就是一段记忆的经验,解决问题的经验罢了,许久不碰,也
就不再是自己的知识和技能了。学如逆水行舟,不进则退。这句话,真觉得有道理啊。
为什么要学这个排序,因为很多实际问题都需要排序,而且排序一般都很耗时,因此更好的排序方法可以提高解决问题的效率。
冒泡排序
通俗来讲,冒泡排序,如果我们要进行大小值由低到高排序的话,两两比较,通常会把最大数据项放在数组顶端。如果有N个值,首轮排序我们会进行
N-1次两两大小比较,因为最大值居于数组最右端,因此不参与下次排序,下一轮排序进行N-2次两两大小比较。
/**
* 冒泡排序示例 pfsu 博客:http://blog.youkuaiyun.com/gkkk_1 2017.6.19
*/
public class MaoPao {
private int arrays[] = { 6, 1, 4, 7, 3, 2, 5, 9, 10, 8,11 };
public static void main(String[] args) {
new MaoPao().bubblingCompositor();
}
/** 冒泡排序
* 10+9+8+7+6+5+3+2+1指代一共需要排序的次数
* N个元素需要排序次数为:((N-1)+(N-2)+...+1) 次
* 由高中数学等差数列的基本公式推出:1+2+3+...+n=n*(n+1)/2
* _____>((N-1)+(N-2)+...+1)=(n-1)*n/2
*
* arrays.length*(arrays.length-1)/2
* */
private void bubblingCompositor() {
for(int i=0;i< arrays.length;i++){
for(int j=0;j<arrays.length-1-i;j++){
if (arrays[j] > arrays[j + 1]) {
System.out.println(arrays[j]+"***排序前***"+arrays[j+1]);
int temp;
temp= arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
System.out.println(arrays[j]+"***排序后***"+arrays[j+1]);
}else{//此部分不需要处理,就是两两比较右侧大于左侧的情况,但为了大家查看比较流程,因此打算打印一下这块的逻辑
System.out.println(arrays[j]+"***排序前***"+arrays[j+1]);
System.out.println(arrays[j]+"***分割线***"+arrays[j+1]);
System.out.println(arrays[j]+"***排序后***"+arrays[j+1]);
}
}
}
System.out.print("_冒泡排序结果:"+"\r\n");
/**打印*/
for(int j=0;j<arrays.length;j++){
System.out.print(arrays[j]+" ");
}
}
}
运行一下你的程序,控制台出现:
6***排序前***1
1***排序后***6
6***排序前***4
4***排序后***6
6***排序前***7
6***分割线***7
6***排序后***7
7***排序前***3
3***排序后***7
7***排序前***2
2***排序后***7
7***排序前***5
5***排序后***7
7***排序前***9
7***分割线***9
7***排序后***9
9***排序前***10
9***分割线***10
9***排序后***10
10***排序前***8
8***排序后***10
10***排序前***11
10***分割线***11
10***排序后***11
1***排序前***4
1***分割线***4
1***排序后***4
4***排序前***6
4***分割线***6
4***排序后***6
6***排序前***3
3***排序后***6
6***排序前***2
2***排序后***6
6***排序前***5
5***排序后***6
6***排序前***7
6***分割线***7
6***排序后***7
7***排序前***9
7***分割线***9
7***排序后***9
9***排序前***8
8***排序后***9
9***排序前***10
9***分割线***10
9***排序后***10
1***排序前***4
1***分割线***4
1***排序后***4
4***排序前***3
3***排序后***4
4***排序前***2
2***排序后***4
4***排序前***5
4***分割线***5
4***排序后***5
5***排序前***6
5***分割线***6
5***排序后***6
6***排序前***7
6***分割线***7
6***排序后***7
7***排序前***8
7***分割线***8
7***排序后***8
8***排序前***9
8***分割线***9
8***排序后***9
1***排序前***3
1***分割线***3
1***排序后***3
3***排序前***2
2***排序后***3
3***排序前***4
3***分割线***4
3***排序后***4
4***排序前***5
4***分割线***5
4***排序后***5
5***排序前***6
5***分割线***6
5***排序后***6
6***排序前***7
6***分割线***7
6***排序后***7
7***排序前***8
7***分割线***8
7***排序后***8
1***排序前***2
1***分割线***2
1***排序后***2
2***排序前***3
2***分割线***3
2***排序后***3
3***排序前***4
3***分割线***4
3***排序后***4
4***排序前***5
4***分割线***5
4***排序后***5
5***排序前***6
5***分割线***6
5***排序后***6
6***排序前***7
6***分割线***7
6***排序后***7
1***排序前***2
1***分割线***2
1***排序后***2
2***排序前***3
2***分割线***3
2***排序后***3
3***排序前***4
3***分割线***4
3***排序后***4
4***排序前***5
4***分割线***5
4***排序后***5
5***排序前***6
5***分割线***6
5***排序后***6
1***排序前***2
1***分割线***2
1***排序后***2
2***排序前***3
2***分割线***3
2***排序后***3
3***排序前***4
3***分割线***4
3***排序后***4
4***排序前***5
4***分割线***5
4***排序后***5
1***排序前***2
1***分割线***2
1***排序后***2
2***排序前***3
2***分割线***3
2***排序后***3
3***排序前***4
3***分割线***4
3***排序后***4
1***排序前***2
1***分割线***2
1***排序后***2
2***排序前***3
2***分割线***3
2***排序后***3
1***排序前***2
1***分割线***2
1***排序后***2
_冒泡排序结果:
1 2 3 4 5 6 7 8 9 10 11
由于个人水平有限,有不足之处,望大家批评指正~