算法初步之—排序

恩,昨天弄了哈二分查找,先来回忆一下二分查找的重要的知识点

1.有序的数组才能使用二分查找

2.二分查找法的效率很高,2的对数来得到二分法的查找次数。

3.二分查找法的原理

      从一个有序数组中查找一个值,首先得到该数组的长度一半的(也就是得到该有序数组的中间值)的值,跟要查找的值进行比较,如果该值等于要查找的值,那么就结束了,如果该值大于要查找的值,那么我们的查找范围缩小,也就是说,这时我们要把我们查找的最大的的下标的值设置成为刚得到的下标。反之,我们则把最小的下标设置成为刚得到的下标值。按照这样的循环方式,最后查找到要查找的值,如果该数组中确实不存在该值,最后我们的最小下标会大于最大下标。此时查找就应该结束了。

核心代码如下:

while(true){ 
	current = (min + max)/2; 
	if(a[current] == searchKey){ 
		return current; 
	}else if(min>max){ 
		return nElems; 
	}else if(a[current] >searchKey){ 
		max = current-1; 
	}else if(a[current] <searchKey){ 
		min = current+1; 
	} 
}

  

 

上面说到的是二分查找法,二分查找法执行的一个前提是,有序数组,那么我们现在要说的就是怎么让一个数组变得有序起来—排序。

排序有多种,下面慢慢道来。

一:冒泡排序—最简单,但应该是最慢的排序

实现代码:

for(int out = a.length-1; out>1 ; out--){//排完一次,确定一个最大值,之后就少排一次
	for(int in = 0  ; in < out; in++){//循环比较内层,根据外层比较的长度变小,相应的内层比较次数变少
		if(a[in]>a[in+1]){
			int temp = a[in];
			a[in] = a[in+1];
			a[in+1] = temp;
		}
	}
}

 

从上面可以看到,如果是10个的数据的数组,他的比较次数应该是:9+8+7+……+1=45

也即:(N-1)+(N-2)+……+1=N*(N-1)/2。效率可想而知。

(未完待续)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值