【排序】01.冒泡排序

【排序】01.冒泡排序

基本思想

让最大的数浮动到数组最后的位置,其次大的数浮动到数组倒数第二个位置……即n个数,排n-1次,每次从左到右,依次两两比较大小,将最大的置后。
p22.jpg

代码

import java.util.Arrays;

public class Solution {
   public static void main(String[] args) {
        int arr[] = {38,5,19,26,49,97,1,66,22};
        for(int j = 0;j < arr.length-1 ;j++){   //第一层for循环:共排n-1次
            for (int i = 0;i < arr.length-1-j;i++){     //第二层:每次只需排n-j个数
                if (arr[i]>arr[i+1]){
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    } 
}

改进后代码

添加flag值以判断是否排好序

import java.util.Arrays;

public class Solution {
   public static void main(String[] args) {
        int arr[] = {38,5,19,26,49,97,1,66,22};
        int flag = 1;
        for(int j = 0;j < arr.length-1 && flag == 1 ;j++){
            flag = 0;
            for (int i = 0;i < arr.length-1-j;i++){
                if (arr[i]>arr[i+1]){
                    flag = 1;//如果一次排序后没有位置发生移动,则flag=0,排序结束
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    } 
}

总结

冒泡排序最好情况是已排好序,按改进后算法,只需比较1次,循环n-1次,时间复杂度是 O ( n ) O(n) O(n)
最坏情况是全部逆序,需比较n-1次,每次分别循环为1,2,3…n-1次,即 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2,最终时间复杂度是 O ( n 2 ) O(n^2) O(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值