二分法排序二分法插入排序的应用实例?

二分法排序  时间:2021-06-26  阅读:()

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

Digital-VM:服务器,$80/月;挪威/丹麦英国/Digital-VM:日本/新加坡/digital-vm:日本VPS仅$2.4/月

digital-vm怎么样?digital-vm在今年1月份就新增了日本、新加坡独立服务器业务,但是不知为何,期间终止了销售日本服务器和新加坡服务器,今天无意中在webhostingtalk论坛看到Digital-VM在发日本和新加坡独立服务器销售信息。服务器硬件是 Supermicro、采用最新一代 Intel CPU、DDR4 RAM 和 Enterprise Samsung SSD内存,默认...

RangCloud19.8元/月,香港cn2云主机,美国西雅图高防云主机28元/月起

rangcloud怎么样?rangcloud是去年年初开办的国人商家,RangCloud是一家以销售NAT起步,后续逐渐开始拓展到VPS及云主机业务,目前有中国香港、美国西雅图、韩国NAT、广州移动、江门移动、镇江BGP、山东联通、山东BGP等机房。目前,RangCloud提供香港CN2线路云服务器,电信走CN2、联通移动直连,云主机采用PCle固态硬盘,19.8元/月起,支持建站使用;美国高防云...

ZoeCloud:香港BGP云服务器,1GB内存/20GB SSD空间/2TB流量/500Mbps/KVM,32元/月

zoecloud怎么样?zoecloud是一家国人商家,5月成立,暂时主要提供香港BGP KVM VPS,线路为AS41378,并有首发永久8折优惠:HKBGP20OFF。目前,解锁香港区 Netflix、Youtube Premium ,但不保证一直解锁,谢绝以不是原生 IP 理由退款。不保证中国大陆连接速度,建议移动中转使用,配合广州移动食用效果更佳。点击进入:zoecloud官方网站地址zo...

二分法排序为你推荐
ipv6电视什么是ipv6网络电视 有什么好处mergefieldWORD 邮件合并中----插入的域{MERGEFIELD "班级"},原始1201班想得到前连个字符怎么改域代码?素数算法什么是素数算法动态图片格式动态图片是什么格式?avc是什么格式XVID/MPEG/AVC都是什么意思啊上行宽带上行宽带和下行宽带什么意思音乐代码在html中插入mp3音频的代码是什么java程序员招聘java工程师待遇如何sms是什么什么是SMS协议动画分镜头脚本请问什么是动画分镜头脚本,什么是电影分镜头脚本以及什么是广告分镜头脚本?
网站域名空间 韩国vps俄罗斯美女 新通用顶级域名 香港机房 电影服务器 512m 正版win8.1升级win10 南昌服务器托管 绍兴高防 合肥鹏博士 有奖调查 1美金 vip域名 免费私人服务器 服务器是干什么用的 电信网络测速器 新加坡空间 网络速度 asp空间 美国十大啦 更多