排序算法-冒泡

本文介绍了算法的两种主要衡量方法:原始的基于时间的测量(如代码示例中的T1类),以及常用的大O记法,它关注执行次数与问题规模的关系。以冒泡排序为例,详细解析了其时间复杂度(O(n^2))、空间复杂度(O(1))和稳定性特性。
摘要由CSDN通过智能技术生成

算法的衡量方法

- 有2个指标:时间和空间

最原始的方法:

public class T1 {
    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        int[] arr=new int[10];
        ThreadLocalRandom r=ThreadLocalRandom.current();
        for(int i=0;i<arr.length;i++){
            arr[i]=r.nextInt(100);
        }
        long end=System.currentTimeMillis();
        System.out.println("算法执行的时间为:"+(end-start)+"ms");
    }
}

这种方式目前无法使用,因为受到多方面的限制,例如内存大小、CPU主频等

目前使用最多的方式是大O记法:

1、查找算法中执行次数最多的语句,例如是第7句

2、排除问题规模的影响,将运行次数和问题规模建立一个等式,例如上面的执行次数为N,其中N为问题规模

3、剔除等式中常量部分,只保留最高次幂部分,并且写成O(n),称为时间复杂度---正相关

常见的排序有7种:冒泡、插入、选择、快速、希尔、归并和堆

 冒泡排序

public class T1 {
    public static void main(String[] args) {
        int[] arr=new int[10];
        ThreadLocalRandom r=ThreadLocalRandom.current();
        for(int i=0;i<arr.length;i++){
            arr[i]=r.nextInt(100);
        }
        for(int tmp:arr)
            System.out.print(tmp+"\t");
        System.out.println();
        for(int k=1;k<arr.length;k++){
            for(int i=0;i<arr.length-k;i++){
                if(arr[i]>arr[i+1]){
                    int tmp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=tmp;
                }
            }
        }
        for(int tmp:arr)
            System.out.print(tmp+"\t");
    }
}

时间复杂度:O(n**2)

空间复杂度:O(1),这里的1(表示所额外需要的空间数)为常量

稳定性:稳定的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值