前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运行时间中的对数

运行时间中的对数

作者头像
心跳包
发布2020-08-31 10:25:19
3490
发布2020-08-31 10:25:19
举报

如果一个算法用常数时间(O(1))将问题的大小消减为某一部分的(通常1/2),那么该算法就是O(logN).另一方面,如果使用常数时间只是把问题减少一个常数,那么该算法就是O(N).

对分查找:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int BinarySearch(const int A[],int X,int N)
{
	int Low,Mid,High;
	
	Low=0;
	High=N-1;
	while(Low<=High)
	{
		Mid=(Low+High)/2;
		printf("(Low+High)/2;%d,Low %d,High %d\n",Mid,Low,High);
		if(A[Mid]<X)
		{
			Low=Mid+1;
			printf("Low;%d\n",Low);
		}
		else
		{
			if(A[Mid]>X)
			{
				High=Mid-1;
				printf("High;%d\n",High);
			}
			else
			{
				printf("Mid;%d\n",Mid);
				return Mid;		
				
			}
		}		
	}
	return -1;
}
int main()
{
	int number[]={1,4,10,15,16};
	int data=0;
	
	printf("start ....\n");	
	data=BinarySearch(number,4,5);
	printf("下标是:%d\n",data);	
	exit(0);
}

运行

代码语言:javascript
复制
start ....
(Low+High)/2;2,Low 0,High 4
High;1
(Low+High)/2;0,Low 0,High 1
Low;1
(Low+High)/2;1,Low 1,High 1
Mid;1
下标是:1

欧几里德算法

两个整数的最大公因数是同时整除二者的最大整数。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int Gcd(unsigned int M,unsigned int N)
{
	unsigned int Rem;
	while(N>0)
	{
		Rem=M%N;
		M=N;
		N=Rem;		
	}
	return M;
}
int main()
{
	int number[]={1,4,10,15,16};
	int data=0;
	
	printf("start ....\n");	
	data=Gcd(4,5);
	printf("Gcd:%d\n",data);	
	exit(0);
}

运算

代码语言:javascript
复制
start ....
Gcd:1
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档