九、冒泡、选择、插入排序 + 算法效率

复习数组相关

 

1、函数调用原理

2、指针就是地址的别名,指针类型变量 字节数:4字节(32位操作系统)/8字节(64位操作系统)

冒泡排序

        n个数字会交换n-1趟,

        第1趟比较n-1次;

        第2趟比较n-2次;

        第3趟比较n-3次;

        ...

        第j趟比较n-j次。

        

 

选择排序

        从第一个位置开始,假设为最小值,然后在后续的数列中找到最小值和当前假设的最小值进行位置交换,然后依次往后排序

        

 

插入排序:

        把数列看为是一个有序数列和一个无须数列的组合,将后面无序数列的每一项插入到前面有序的数列中

        

 

算法效率

        时间复杂度:语句总的执行次数,一定是关于问题规模的函数

        记法:O( f (n) ) f(n)——>关于问题规模的函数,越小越好

        常见的时间复杂度:O(1)< O(log n)< O(n)< O(n^2)、

        

O(log n)实例:

        

提问:冒泡排序的最优时间复杂度是?

        答:O(n),在数列趋于有序的情况下,只遍历一趟的时候就排序成功,这个时候的时间复杂度就是O(n)

提问:遍历查找数据时候时间复杂度?

        答:O(n),这里是要求的是平均的时间复杂度,3,2,1,4,6这个数列中要找到4的位置,4有可能在第一个位置,那遍历一次就找到,如果4在最后一个位置,那就得遍历整个一维数组,因此:可能遍历的次数是(1次+2次+3次+......+n次)/ n,那就是(1+n)*n/2,最后再除以n,就求得平均时间复杂度

提问:二分查找时间复杂度?

        答:O(log N),每次都是折半查找,那就是n/2/2/2/2/.....,除以2的次数不确定,所以是log N

        

 

时间复杂度的推导方式:

        1、常数项化简为O(1)

        2、函数次数:只保留跟问题规模 n 相关的最高项,去除与最高项相乘的常数

总结:访问数据的各个数据次数的累加和——>问题规模

空间复杂度:额外开辟的内存空间(问题规模相关)

                     没有额外开辟跟问题规模相关的内存,那开辟的内存还是O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值