八大常用排序算法——冒泡排序

冒泡排序

  重复遍历待排数列中地元素,两两进行比较,如果它们 地顺序错误,就将它们交换位置,一直到最后一个数。


 算法思想

  在每轮循环中,将相邻的两个树进行比较,如果前面的数大于后面的数,就进行交换,一直到最后排序的位置。

  • 总轮数:i=arr.length-1(因为一个数不需要和它自己比较)
  • 每一轮需要比较的次数:j=arr.length-1-i(在前面的轮数中已经排好序的数不需要参与后面的比较)
  • 两层for循环:
  • 第一层:控制比较的轮数
  • 第二层:控制在本轮中需要比较的次数

  具体分析:
在这里插入图片描述
  从上面地排序过程看出,第1趟排序完成后,最大值12到了最后面;第2趟排序完成后,次大值9排在了倒数第二位;并且,在第二趟排序中,只需要看12之前地数字。依此类推,直到排完所有地数字,即拍到数组中只有一个待排数字。

 代码实现:


import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args){
        int[] arr = {8,3,6,9,0,12,7,5};
        System.out.println("冒泡排序前:"+Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println("冒泡排序后:"+Arrays.toString(arr));
    }
    
    //冒泡排序方法
    public static  void bubbleSort(int[] arr){
        for(int i = 0;i<arr.length;i++){//控制比较的轮数
            for(int j = 0;j<arr.length-1-i;j++){//控制比较的次数
                if(arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}

  从分析过程中我们看到,在第5趟完成之后,序列已经有序了,第6趟和第7趟已经没必要进行排序。这时,我们可以对冒泡排序进行优化:
添加一个标记,如果一趟排序中发生了交换,则标记为true;没有交换,则标记为false。如果某一趟没有发生交换,则说明排序已经完成,可以退出。

优化后的代码如下:

public static void bubbleSort(int[] arr){
        for(int i=1;i<arr.length;i++){
            boolean flag = false;//false:没有发生交换;true:发生交换
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }

            if(flag==false){//如果没有发生交换,则退出
                break;
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值