排序算法
内部排序:直接使用内存的排序
直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序
测试算法运行的时间
这里是用的是输出算法执行前的时间,和算法执行之后的时间,来查看算法实际花费的时间。
代码:
import java.text.SimpleDateFormat;
import java.util.Date;
//排序前的时间输出
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String Date1 = simpleDateFormat.format(date);
System.out.println("排序前的时间为"+Date1);
//排序之后的时间的输出
Date date_after = new Date();
String Date2 = simpleDateFormat.format(date_after);
System.out.println("排序前的时间为"+Date2);
时间频度
一个算法中的语句执行次数称为语句频度和时间频度,记为T(n)。
一般来说,T(n)可以忽略常数项,忽略低次项,忽略系数。
时间复杂度
-
常数阶O(1)
只要没有循环等复杂结构,都是O(1)。
所消耗的时间并不会随着某个变量的增长而增长。
-
对数阶O(log2N)
int i = 1; while(i<n){ i = i*2; }这段代码就是循环log2N次,结束循环。
-
线性阶O(n)
for(int i = 0;i<n;i++)单层的for循环就是线性阶。
-
线性对数阶O(nlogN)
实际上就是对数阶循环了n遍
for(int j = 1;j<=n;j++){ int i = 1 while(i<n){ i = i*2; } } -
平方阶O(n^ 2)
实际上就是两个for循环嵌套
for(i = 1;i<=n;i++){ for(j = 1;j<=n;j++){ } }
常见时间复杂度排序:
O(1) < O(log2N) < O(n) < O(nlog2n) < O(n^2) < O(2^n)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wa5PsAZa-1615984293168)(/Users/lizhihan/Library/Application Support/typora-user-images/image-20210305163913271.png)]](https://i-blog.csdnimg.cn/blog_migrate/bc5902ef9ba5df293655ccd57590b125.png)
算法的空间复杂度
定义为该算法所耗费的存储空间,有的算法需要占用的临时工作单元数与解决问题的规模n有关,随着n的增大,占用的存储单元也增大。
一般来说,从用户体验来说,更看重时间复杂度,一些缓存产品和算法本质上就是空间换时间。
这篇博客介绍了排序算法中的时间频度、时间复杂度和空间复杂度。讨论了内部排序算法,如直接插入、冒泡、快速等,并通过代码示例解释了如何测试算法运行时间。时间复杂度部分涵盖了常数阶、对数阶、线性阶、线性对数阶、平方阶等,强调了不同阶别的增长趋势。同时,也提及了空间复杂度,指出其衡量算法所需存储空间的重要性。
2273

被折叠的 条评论
为什么被折叠?



