冒泡排序

14 篇文章 0 订阅

第一版

找出每个位置的最大值,便于理解

import java.util.Arrays;

/**
 * @description: 冒泡排序
 * @author: xt
 * @create: 2021-03-29 21:15
 **/
public class bubble {

    public static void main(String[] args) {
        int[] arr={9,8,7,4,5,6,1,3,2};

        //倒叙找到每个位置上最大的值
        for (int i = arr.length-1; i >0 ; i--) {
            findMax(arr,i);
        }

        System.out.print(Arrays.toString(arr));

    }

    /*
     * @Author xt
     * @Description 找到给定位置最大值
     * @Date 21:28 2021/3/29
     * @Param [arr, index]
     * @return void
     **/
    static void findMax(int[] arr,int index){
        for (int i = 0; i < index; i++) {
            if(arr[i]>arr[i+1]){
                swap(arr , i, i+1);
            }
        }
    }

    static void swap(int[] arr ,int i,int j){
        int tmp=arr[i];
        arr[i]=arr[j];
        arr[j]=tmp;
    }
}

第二版

冒泡排序最好的时间复杂度是O(n),有可能已经是有序的

import java.util.Arrays;

/**
 * @description: 冒泡排序
 * @author: xt
 * @create: 2021-03-29 21:15
 **/
public class bubble_V2 {

    public static void main(String[] args) {
        int[] arr={9,8,7,4,5,6,1,3,2};

        //倒叙找到每个位置上最大的值
        for (int i = arr.length-1; i >0 ; i--) {
            //若初始序列为“正序”,则只需进行一趟排序,
            //在排序过程中进行n-1次比较,且不移动记录
            //这个时候最好的时间复制读是O(n)
            boolean stopFlag=true;
            for (int j = 0; j < i; j++) {
                if(arr[j]>arr[j+1]){
                    swap(arr , j, j+1);
                    stopFlag=false;
                }
            }
            //stopFlag为true代表内循环一轮后,没有交换,
            //说明已经排好序了,可以暂停了
            if(stopFlag){
                break;
            }
        }
        System.out.print(Arrays.toString(arr));
    }

    static void swap(int[] arr ,int i,int j){
        int tmp=arr[i];
        arr[i]=arr[j];
        arr[j]=tmp;
    }
}

参考
https://blog.csdn.net/wubingju93123/article/details/81215984?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161702583716780266241978%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161702583716780266241978&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-10-81215984.first_rank_v2_pc_rank_v29&utm_term=%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值