作业1

第一章——绪论

3.简述数据逻辑结构与存储结构的关系。

/* 
逻辑结构是数据之间抽象的逻辑关系,而存储结构是这种关系在计算机内存中的具体实现;同一逻辑结构可以选用不同的存储结构来实现,不同的选择会直接影响程序的效率和功能。
*/

10.分析下面程序段中循环语句的执行次数。

int j=0,s=0,n=100;
do
{	j=j+1;
 	s=s+10*j;
} while (j<n && s<n);	
/*
第 1 次循环:j=1, s=10
第 2 次循环:j=2, s=10+20=30
第 3 次循环:j=3, s=30+30=60
第 4 次循环:j=4, s=60+40=100
此时 s=100,条件 s < n 为假,所以循环停止。
则循环体执行了 4 次。
*/

11.设n为正整数,给出下列3个算法关于问题规模n的时间复杂度。

// (1)算法1:
void fun1(int n)
{	i=1,k=100;
 	while (i<=n)
    {	k=k+1;
     	i+=2;
    }
}
/*
循环初始 i = 1,每次 i 增加 2,直到 i > n。
循环次数大约是 n/2 级别。
所以时间复杂度为:O(n)
*/
// (2)算法2:
void fun2(int b[],int n)
{	int i,j,k,x;
 	for (i=0;i<n-1;i++)
    {	k=i;
        for (j=i+1;j<n;j++)
            if (b[k]>b[j]) k=j;
     	x=b[i]; b[i]=b[k]; b[k]=x;
    }
}
/*
外层循环 i 从 0 到 n-2,共 n−1 次。
内层循环 j 从 i+1 到 n−1,循环次数为 n−1−i。
总比较次数:∑_(i=0)^(n-2)(n−1−i)=(n−1)+(n−2)+⋯+1= (n-1)n/2
所以时间复杂度为:O(n^2)
*/
// (3)算法3:
void fun3(int n)
{	int i=0,s=0;
 	while (s<=n)
    {	i++;
        s=s+i;
    }
}
/*
s 是累加和:s=1+2+⋯+i= i(i+1)/2
循环条件 s≤n 即:i(i+1)/2≤n
当 i 约等于 √2n 时,i^2/2 ≈ n,所以 i ≈ √2n
因此循环次数为 𝑂(√n)
*/
posted on 2025-11-01 00:07  wss0920  阅读(9)  评论(0)    收藏  举报