冒泡排序

冒泡排序

1、冒泡排序基本算法实现

a主要思想

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u9iXBfXW-1611149444912)(C:\Users\29455\AppData\Roaming\Typora\typora-user-images\1611147477647.png)]

b、代码实现

public static void main(String[] args) {
        int[] a = {1,5,9,8,7,4};
        for (int i = 0; i < a.length - 1; i++) {
            for(int j = 0; j < a.length - i - 1; j++){
                //从小到大排序
                if(a[j] > a[j + 1]){
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

运行结果:
    1 4 5 7 8 9 

2、冒泡排序API

a、冒泡排序API设计

类名Bubble
构造方法Bubble():创建Bubble对象
成员方法1、public static void sort(Comparable[] a) 对数组内元素进行排序
2、private static boolean greater(Comparable a, Comparable b)判断元素大小
3、private static void exch(Comparable a, int i, int j)对数组内元素进行交换

b、冒泡排序API代码实现

public class Bubble {

    //进行排序处理
    public static void sort(Comparable[] a){
        for(int i = 0; i < a.length - 1; i++){
            for(int j = 0; j < a.length - 1 - i; j++){
                if(greater(a[j], a[j + 1])){
                    exch(a, j, j + 1);
                }
            }
        }
    }

    //判断两个数的大小
    private static boolean greater(Comparable a,Comparable b){
        return a.compareTo(b) > 0;
    }

    //交换数组索引值
    private static void exch(Comparable[] a, int i, int j){
        Comparable temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

Test测试

import java.util.Arrays;

public class BubbleTest {

    public static void main(String[] args) {
        Integer[] a = {6,5,4,3,2,1};
        Bubble.sort(a);
        System.out.println(Arrays.toString(a));

        Double[] b = {9.9,6.6,5.5,3.3,1.1,0.9};
        Bubble.sort(b);
        System.out.println(Arrays.toString(b));
    }
}

运行结果:
    [1, 2, 3, 4, 5, 6]
[0.9, 1.1, 3.3, 5.5, 6.6, 9.9]

3、冒泡排序时间复杂度分析

冒泡排序使用了双层for循环,其中内层循环的循环体是真正完成排序的代码,所以在分析复杂度时,主要分析内层循环

在最坏情况下,也就是说待排序的数组和排序算法为逆序时,那么

元素的比较次数:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

元素的交换次数:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

总的执行次数为

n^2 - n

/ 2

元素的交换次数:

(n - 1) + (n - 2) + (n - 3) + …+ 2 + 1 = n^2 / 2 - n / 2

总的执行次数为

n^2 - n

按照大O记法推导,保留函数中的最高阶项那么最终冒泡排序的时间复杂度为O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值