算法效率的分析--【以选择排序与冒泡排序为基础】



              在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法的效率问题:

              首先我们把两种排序算法的概念重温一遍:

选择排序:在每一轮中,找出最小的元素放在他最终的位置。挺起来有些别扭,我们举个实例:

  eg:        8, 5,1, 20, 6, 3

 1ed······  1, 5,8, 20, 6, 3

 2ed······  1, 3, 8,20, 6,5

 3ed······  1, 3,5, 20, 6, 8

 4ed······  1, 3,  5, 620,8

 5ed······  1, 3,  5, 6,  8,20

这样一看应该就比较清楚了,那么在每次循环中比较是主要的操作,所以我们就把比较作为该算法分析的一个点,接下来我们从数学的角度分析:

在算法分析中有几个重要的公式:

在选择排序中:

for(i=0;i--->n-1)
{
       min=i;
       for(j=i+1;j---->n){
       if  array[j]<array[min]
            min=j;
    }
     swap(array[min],array[i]);
}
由上面我们可以得出数学公式:


这样我们就可以粗略的计算该算法的时间复杂度。通过这样的结果我们就可以衡量不同的算法在特定的条件下,哪个效率会更高。其实下面的冒泡排序算法的时间复杂度跟上面的选择排序是一种类型的,所以下面我只大概的说明下:

冒泡排序:

关于冒泡排序,这个名字其实比较有意思,记得小时候经常向小水渠丢石头,每次我们丢入一块石头的时候,你会发现都会有一个水泡冒出来,这样联想起来,这个算法就更加容易理解了;通俗的话来讲就是,在每一轮的比较中,都会有一个最大的元素沉下去。下面我们一起看看伪代码:

for(i=0;i<array.length-1){
	for(j=0;j<array.length-i-1){
		if(array[j]>array[j+1])
			swap(a[j][j+1])
	}
}

经过同样的步骤我们可以得到相同的结果就是n^2型,而这两种算法都属于蛮力算法,相对比较简单,有难度的等小弟再修炼一段时间与大家分享,有问题的欢迎一起学习讨论。


博主励志:

你无法改变的事情,就请默默的接受吧,否则伤心,伤脑,伤身...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值