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
[六一云迎国庆]转盘活动实物礼品美国G口/香港CTG/美国T级超防云/物理机/CDN大促销六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,...
我们先普及一下常识吧,每年9月的第一个星期一是美国劳工节。于是,有一些服务商会基于这些节日推出吸引用户的促销活动,比如RackNerd有推出四款洛杉矶和犹他州独立服务器,1G带宽、5个独立IP地址,可以配置Windows和Linux系统,如果有需要独立服务器的可以看看。第一、劳工节促销套餐这里有提供2个套餐。两个方案是选择犹他州的,有2个方案是可以选择洛杉矶机房的。CPU内存SSD硬盘配置流量价格...
Digital-VM商家目前也在凑热闹的发布六月份的活动,他们家的机房蛮多的有提供8个数据中心,包括日本、洛杉矶、新加坡等。这次六月份的促销活动全场VPS主机六折优惠。Digital-VM商家还是有一点点特点的,有提供1Gbps和10Gbps带宽的VPS主机,如果有需要大带宽的VPS主机可以看看。第一、商家优惠码优惠码:June40全场主机六折优惠,不过仅可以月付、季付。第二、商家VPS主机套餐1...
二分法排序为你推荐
mergefield合并邮件,最后怎么生成呢?郭列90后的杰出代表有那些?youtube创始人比特币创始人到底是谁公众号付费阅读目前公众号有没有的付费问答平台可以提供的?cursorlocation在ENVI中双击遥感图像出来个CURSOR LOCATION/value对话框。下面有个LL : 31?6'21.84"N, 117?9'11.78"Eza是哪个国家的IE是哪个国家的缩写特斯拉model3降价小鹏P7和特斯拉Model 3,买哪个更加划算?东兴证券网站东兴证券交易软件如何操作?怎样删除聊天记录怎么批量清除微信聊天记录cc防火墙服务器里安全狗里的WEB防火墙是什么意思
备案域名购买 域名拍卖 linode日本 bluevm kvmla t牌 分销主机 香港主机 香港机房托管 Hello图床 sub-process 国内php空间 亚洲小于500m 创梦 刀片服务器的优势 vip购优惠 免费申请个人网站 超级服务器 云营销系统 linode支付宝 更多