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
CUBECLOUD(魔方云)成立于2016年,亚太互联网络信息中心(APNIC)会员,全线产品均为完全自营,专业数据灾备冗余,全部产品均为SSD阵列,精品网络CN2(GIA) CU(10099VIP)接入,与当今主流云计算解决方案保持同步,为企业以及开发者用户实现灵活弹性自动化的基础设施。【夏日特促】全场产品88折优惠码:Summer_2021时间:2021年8月1日 — 2021年8月8日香港C...
随着自媒体和短视频的发展,确实对于传统的PC独立网站影响比较大的。我们可以看到云服务器商家的各种促销折扣活动,我们也看到传统域名商的轮番新注册和转入的促销,到现在这个状态已经不能说这些商家的为用户考虑,而是在不断的抢夺同行的客户。我们看到Namecheap商家新注册域名和转入活动一个接一个。如果我们有需要新注册.COM域名的,只需要5.98美元。优惠码:NEWCOM598。同时有赠送2个月免费域名...
reliablesite怎么样?reliablesite是一家于2006年成立的老牌美国主机商,主要提供独服,数据中心有迈阿密、纽约、洛杉矶等,均免费提供20Gbps DDoS防护,150TB月流量,1Gbps带宽。月付19美金可升级为10Gbps带宽。洛杉矶/纽约/迈阿密等机房,E3-1240V6/64GB内存/1TB SSD硬盘/DDOS/150TB流量/1Gbps带宽/DDOS,$95/月,...
二分法排序为你推荐
excel大写金额在Excel中如何输入数字直接显示大写金额?代发邮件我想做邮件代发,怎么做效果好?手机软件开发工具手机app一般用什么 软件开发云输入法QQ云输入法怎样调整候选词的个数?全局钩子求助:全局钩子是怎么回事啊?下载的游戏为什么会安装钩子?求大神帮助网站客服代码如何将在线客服代码插入到您的网页中?动画分镜头脚本动漫脚本和分镜头的区别?懂的进erp系统教程如何使用ERP系统操作?怎样删除聊天记录如何删除和一个人的聊天记录?flash序列号Flash软件 的序列号是什么?
华众虚拟主机管理系统 cn域名价格 vps服务器 hostigation linode 免费cdn加速 标准机柜尺寸 蜗牛魔方 帽子云 t云 香港新世界中心 国外视频网站有哪些 石家庄服务器 zcloud restart cc加速器 西部主机 西部数码主机 screen 免费网络电视软件 更多