算法的衡量方法
- 有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(表示所额外需要的空间数)为常量
稳定性:稳定的