【11月13日】排序算法的效率问题+彩蛋

本文介绍了几种常见的排序算法,并探讨了如何从空间复杂度、时间复杂度及稳定性等方面评价算法的优劣。通过实例说明了不同算法的特点及其适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天断断续续,讲了很多种基本的排序算法。

学习的奇妙之处在于,即使是再简单不过的问题,总有人思解出新奇的巧妙来。

譬如除了以前介绍的排序算法外,还有基于树结构的堆排序算法,基于有序数表合并的合并排序算法等等等。

既然排序算法纷繁多态,那么究竟哪一种算法算是“好的”呢?这就涉及到对算法的评价。公欲搞评价,必先放指标。一般来说,可以从以下几个方面判断排序算法的优劣。

1.系统的资源占用(空间复杂度):包括内存的占用和其他资源的占用。一个“好”的排序算法必然会尽量少的占用系统的内存。在上述介绍的方法中,大部分只需要使用一个元素的存储单位。用于交换数据(在这些算法中,数据都是一个个进行排序的,故在内存中实际一次只对一个元素进行操作)。而合并算法需要使用与原始数组一样长的n个元素的存储单位,用来保存多遍的合并操作。

2.计算的复杂度(时间复杂度):对于n个元素的数组,从最差和平均两个视角去考查他们的复杂度。


 

  


此外,关于排序法还有一个稳定性的概念,稳定性是指维持原始记录里面相等数据相对次序的性质。这也就是说,在原始的数据里面有· · ·,d1d2,· · ·,在排序之后还为· · ·,d1d2,· · ·(即d1d2的相对次序保持不变),那么这个算法就具有稳定性。在上述的算法里,冒泡、插入和合并算法,都是稳定性算法,而选择,shell,快速和堆排序都不是稳定性算法。

 

可见,在没有给具体情境的条件下,谈算法的优劣那就是耍流氓。单n很小时,以上所说的什么时间复杂度,空间复杂度,统统不要考虑嘛,哪个掌握的数量不会出错就写哪个,毕竟你开心就好。笑。

顺便公布一下,昨天的答案。

counter1 = 1

counter2 = 0

反正我是做错了,翻车了啊!其实这样问题主要是涉及到JAM(Java 虚拟机)中类的初始化过程,关于这点尚在学习阶段,学成再来填这个坑。

今天的题目是,以下程序会输出什么呢?

public class Test extends Father{

private String name=test;

public static void main(String[] args){

Test test = new Test();

System.out.println(test.getName());

}

}

class Father{

private String name=father;

public String getName() {

return name;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值