数据结构-排序问题之冒泡排序

最近刚进一家公司,业务不太忙,因此我就有些许空闲时间,来学点新的东西或者复习旧的东西了。最大感觉,国内很多计算机教材,里面的理论概念
超级繁琐,我简直一页都看不下去了。个别不错的书籍,看的整体感觉还挺好的。还有,知识就是一段记忆的经验,解决问题的经验罢了,许久不碰,也
就不再是自己的知识和技能了。学如逆水行舟,不进则退。这句话,真觉得有道理啊。
为什么要学这个排序,因为很多实际问题都需要排序,而且排序一般都很耗时,因此更好的排序方法可以提高解决问题的效率。

冒泡排序

通俗来讲,冒泡排序,如果我们要进行大小值由低到高排序的话,两两比较,通常会把最大数据项放在数组顶端。如果有N个值,首轮排序我们会进行
N-1次两两大小比较,因为最大值居于数组最右端,因此不参与下次排序,下一轮排序进行N-2次两两大小比较。
/**
 * 冒泡排序示例 pfsu 博客:http://blog.csdn.net/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 

由于个人水平有限,有不足之处,望大家批评指正~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值