第2章 算法分析:课后习题

1:Eratosthenes筛选法

算法描述O(NloglogN):   时间复杂度的推断》》Knuth,Volume 2,page 394

Eratosthenes筛是一种用于计算小于N的所有素数的方法。我们从制作整数2到N的表开始。我们找出最小的未被删除的整数i,打印i,然后删除i,2i,3i,......。当i> √N时,算法终止。

算法代码:

void Eratosthenes(int n)
{
	for (int i = 2; i < n+1; i++)
		a[i]=1;
	for (int i = 2; i <= sqrt(n); i++)
	{
		if(a[i]==1)
		{
			int j=2;
			while(i*j <= n)
			{
				a[i*j]=0;
				j++;
			}
		}
		
	}
	for (int i = 2; i <= n; i++)
		if(a[i]==1)
			cout<

程序演示:

第2章 算法分析:课后习题_第1张图片

2:求解主要元素

算法描述:

大小为N的数组A,其主要元素是一个出现次数超过N/2的元素(从而这样的元素最多有一个)。例如数组  3,3,4,2,4,4,2,4,4 有一个主要元素4,
而数组3,3,4,2,4,4,2,4没有主要元素。如果没有主要元素,那么你的程序应该指出来。

算法代码:

int majority(int a[], int b[], int n)
{
	if (n==0)
		return tmp;
	if (n==1)
		return a[0];
	if(n%2==1)
	{
		tmp=a[n-1];
		n--;
	}
	int i=0,j=0;
	for (i = 0, j = 0; i < n; i+=2)
		if(a[i] == a[i+1])
			b[j++]=a[i];
	majority(b, a, j);
}


算法演示:

第2章 算法分析:课后习题_第2张图片

你可能感兴趣的:(数据结构与算法分析-C语言描述,素数,算法,Eratosthenes筛选法,求解主要元素)