冒泡排序-过程详细版

冒泡排序:

  • 冒泡排序是简单经典的排序算法,它重复地走访过要排序地元素,一次比较相邻地两个元素,如果他们的顺序错误就把他们调换过来,知道没有元素再需要交换,排序完成。名字由来:元素经由交换慢慢“浮”到数列顶端

  • 冒泡排序算法:
    1.比较相邻的元素,如果前一个比后一个大,就把他们两个调换位置
    2.对每一对相邻元素作同样的哦你工作,从开始第一对到结尾的最后一对。这步做完之后,最后的元素会是最大的数
    3.针对所有的元素重复以上步骤,除了最后一个
    4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
    5.优点:
    每进行一趟排序,就会少比较一次,因为每进行一趟排序就会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。

实例过程:
3 5 2 6 2

第一轮:
比较3 和5 ,5>3,不要进行交换
3 5 2 6 2
继续比较5 和 2,5>2,交换位置
3 2 5 6 2
继续比较5 和 6, 6>5,不需交换
3 2 5 6 2
继续比较6 和2,6>2,不需要交换
3 2 5 2 6
6 下沉到最后,两个2 都分别向上(前)冒出

第二轮:
比较3 和2 ,3>2,交换位置
2 3 5 2 6
比较3 和 5 ,5>3,不需要交换
2 3 5 2 6
比较5 和 2,5>2,需要交换
2 3 2 5 6
不需要比较5 和6

第三轮:
比较2 和 3,3>2,不需要交换
2 3 2 5 6
比较 3 和 2,3>2,需要交换位置
2 2 3 5 6
不需要比较了

第四轮:
比较2 和 2 ,不需要交换
其他也不需要比较了
2 2 3 5 6

四轮结束

代码实现:


public class Practice5 {
    public static void main(String[] args) {
        int[] arrays = {3,5,2,6,2};
        int[] sorted = sort(arrays);
        System.out.println("最终结果");
        for (int i : sorted){
            System.out.println(i + " ");
        }
    }
    public static int[] sort(int[] array){
        int temp;
        int[] arrays = {3,5,2,6,2};
        //第一层循环表明比较的轮数,比较length-1次
        for (int i=0;i<arrays.length-1;i++){
            System.out.println("第" +(i+1) + "轮开始");
            //第二层循环,相邻的两个比较,次数随着论述的增加不断减少,每轮确定出一个最大的
            for (int j =0;j<arrays.length-1-i;j++){
                if (arrays[j+1]<arrays[j]){
                    temp=arrays[j];
                    arrays[j]=arrays[j+1];
                    arrays[j+1]=temp;
                }
                System.out.println("第" +(i+1) + "轮,第" +(j+1) +"次比较: ");
                for (int k :arrays){
                    System.out.println(k+" ");
                }
                System.out.println();
            }
            System.out.println("结果: ");
            for (int k :arrays){
                System.out.println(k + " ");
            }
            System.out.println();
        }
        return arrays;
    }

}

输出结果:

1轮开始
第1,1次比较: 
3 
5 
2 
6 
21,2次比较: 
3 
2 
5 
6 
21,3次比较: 
3 
2 
5 
6 
21,4次比较: 
3 
2 
5 
2 
6 

结果: 
3 
2 
5 
2 
62轮开始
第2,1次比较: 
2 
3 
5 
2 
62,2次比较: 
2 
3 
5 
2 
62,3次比较: 
2 
3 
2 
5 
6 

结果: 
2 
3 
2 
5 
63轮开始
第3,1次比较: 
2 
3 
2 
5 
63,2次比较: 
2 
2 
3 
5 
6 

结果: 
2 
2 
3 
5 
64轮开始
第4,1次比较: 
2 
2 
3 
5 
6 

结果: 
2 
2 
3 
5 
6 

最终结果
2 
2 
3 
5 
6

代码二:(简洁)

		int[] intArrayNum = {3,10,50,60,90};

        /*
        * {3,10,30,50,26}/
        * {3,10,30,26}//去点50
        * {3,10,26,30}
        * {3,10,26}//去掉30
        * {3,10}
        * */
        for (int i =0;i<intArrayNum.length-1;i++){
            for (int j = 0;j<intArrayNum.length-i-1;j++){
                if (intArrayNum[j+1] < intArrayNum[j]){
                    int tmp = intArrayNum[j];
                    intArrayNum[j] = intArrayNum[j+1];
                    intArrayNum[j+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(intArrayNum));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值