java 二分法排序
public class Lookup {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* 二分法查找
*/
int a[]={23,45,98,100,110,120,140};
int search=120;//记录要查找的元素
int lower=0;//记录第一个元素
int temp=a.length-1 ;
int index=-1;
while(lower<=temp){
index = (lower+temp)/2;//记录中间元素,用两边之和除2.
int currentValue=a[index];
if(currentValue==search){//如果得到的数与要查找的数相等则break退出;
break;
}else if(currentValue<search){//如果得到的数要小于查找的数、就用下标加1;否则减一
lower=index+1;
}else{
temp = index-1;
}
}
if(lower<=temp){
System.out.println(search+"在数组中第:"+(index+1)+"位");
}else{
System.out.println("里面没有这个元素");
}
}
}
二分法查找的适用条件
说”二分查找法只适用于顺序存储的有序表“是正确的,说”指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)“是为了程序的确定性。
实际上只要有序就可以。
按递减排序也可以用二分法。
只是必须把算法规则改变一下。
递增的算法:拿要查找数值与中间序号的数值比较若相等,查找成功;要查找数值比中间序号的数值大,在右边查找,低端序号改为原中间序号加1;要查找数值比中间序号的数值小,在左边查找,高端序号改为原中间序号减1;如此反复。
递减的算法:拿要查找数值与中间序号的数值比较若相等,查找成功;要查找数值比中间序号的数值大,在左边查找,高端序号改为原中间序号减1;要查找数值比中间序号的数值小,在右边查找,低端序号改为原中间序号加1;如此反复。
二分法比较次数
a500/2此,因为使用2分查找,所以从中间开始查找,假设从250开始找,首先比较250大于K还是小于K,如果大于则从250往后找至500
如果小于250,则往前找。
所以一分为2,那么最多也就是a500/2次了
二分法插入排序的复杂度分析
二分插入排序是稳定的与二分查找的复杂度相同;
最好的情况是当插入的位置刚好是二分位置 所用时间为O(n);
最坏的情况是当插入的位置不在二分位置 所需比较次数为
n
S<=∑n「log?n「-2^n「log?n「+1
k= 1
平均时间O(n^2)
C语言中二分法和插入排序案例,就两个!只涉及数组与函数内容,主要是别涉及指针!
你好,二分法
#include
#define f(x) (x*x*x-2*x*x+3*x-4)
void main()
{ float a=-10,b=10,c,eps=1e-5;
while ((b-a)>eps)
{ c=(a+b)/2;
if(f(c)==0) break;
else if(f(a)*f(c)<0) b=c;
else a=c;
}
printf("root=%f
",c);
}
插入排序
#include
int main ()
{
int n[10];
int i, j, k;
int temp;
for (i = 0; i <= 9; i++)
{
printf ("请输入第%d个数:", i + 1);
scanf ("%d", &n[i]);
}
printf ("数组排序前效果如下
");
for (i = 0; i <= 9; i++)
{
printf ("%d ", n[i]);
}
printf ("
");
for (i = 1; i <= 9; i++)
{
for (j = i - 1; j >= 0; j--)
{
if (n[j] < n[i])
break;
}
if (j != i - 1)
{
temp = n[i];
for (k = i; k >= j + 1; k--)
n[k] = n[k - 1];
n[j + 1] = temp;
}
}
printf ("数组排序后效果如下
");
for (i = 0; i <= 9; i++)
{
printf ("%d ", n[i]);
}
printf ("
");
return 0;
}二分法插入排序的应用实例?
代码:
#include
void fun(int a[ ],int n)
{
int i,j,k,temp;
for(i=0;i
ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...
欧路云新上了美国洛杉矶cera机房的云服务器,具备弹性云特征(可自定义需要的资源配置:E5-2660 V3、内存、硬盘、流量、带宽),直连网络(联通CUVIP线路),KVM虚拟,自带一个IP,支持购买多个IP,10G的DDoS防御。付款方式:PayPal、支付宝、微信、数字货币(BTC USDT LTC ETH)测试IP:23.224.49.126云服务器 全场8折 优惠码:zhujiceping...
Megalayer 商家算是新晋的服务商,商家才开始的时候主要是以香港、美国独立服务器。后来有新增菲律宾机房,包括有VPS云服务器、独立服务器、站群服务器等产品。线路上有CN2优化带宽、全向带宽和国际带宽,这里有看到商家的特价方案有增加至9个,之前是四个的。在这篇文章中,我来整理看看。第一、香港服务器系列这里香港服务器会根据带宽的不同区别。我这里将香港机房的都整理到一个系列里。核心内存硬盘IP带宽...
二分法排序为你推荐
代发邮件什么是商务邮件代发?暴力破解rar对RAR压缩包进行解压时需要密码,使用暴力破解仍无法解码该怎么办?手机软件开发工具做安卓软件开发需要哪些工具?云输入法QQ云输入法怎样进行中英文切换?java程序员招聘java工程师待遇如何动画分镜头脚本动漫脚本和分镜头的区别?懂的进短信套餐手机短信都有什么套餐云家政网腾讯网的网址是多少?particular教程particular的用法btest请教SpringSide到底是做什么用的
美国vps评测 中国万网虚拟主机 泛域名绑定 联通c套餐 新加坡服务器 diahosting godaddy优惠券 免费静态空间 河南服务器 本网站服务器在美国 圣诞促销 服务器维护方案 北京双线 phpmyadmin配置 免费phpmysql空间 supercache 带宽测试 广州服务器托管 免费获得q币 空间排行榜 更多