#define false 0
#define true 1
#define maxsize 20typedef struct{
int r[maxsize+1] //r[0]闲置或用作中转、哨兵单元
int length
}sqlistvoid Output(sqlist &L)
{
int i
for(i=1i<=L.lengthi++)
{
printf("%d ",L.r[i])
}
printf("\n")
}void BubbleSort(sqlist &L) {
int i,j, Exchange
for (i=1i<L.lengthi++){
Exchange = false
for (j = 1 j <= L.length-i j++)
if (L.r[j+1] <L.r[j]) {
L.r[0] =L.r[j]
L.r[j] =L.r[j+1]
L.r[j+1] =L.r[0]
Output(L)
Exchange = true
}
if (Exchange == false) return
}
} // BubbleSortint Partition (sqlist &L, int low, int high)
{
int pivotkey
L.r[0]=L.r[low]
pivotkey=L.r[low]
while(low<high)
{ while(low<high&&L.r[high]>=pivotkey)--high
L.r[low]=L.r[high]
while(low<high&&L.r[low]<=pivotkey)++low
L.r[high]=L.r[low]
}
L.r[low]=L.r[0]
return low
}
void QSort (sqlist &L,int low,int high)
{
int pivotloc
if (low<high)
{pivotloc=Partition(L,low,high)Output(L) QSort(L,low,pivotloc-1) QSort(L,pivotloc+1,high) }
}
int main()
{
sqlist L
int i
scanf("%d",&L.length)
for(i=1i<=L.lengthi++)
{
scanf("%d",&L.r[i])
}
printf("BubbleSort:\n")
BubbleSort(L)
printf("QSort:\n")
QSort(L,1,L.length)
return 0
}
算法步骤:第一步,要确定表示和的变量s和计数变量i,并赋值,一般情况下,赋s=0 i=0第二步,确定使用哪种循环结构,本题使用当型循环结构,确定判断条件i≤9 满足条件时,执行第三步,不满足条件时,执行第四步;第三步:执行,i=i+1第四步:输出s;程序结束.程序如下:S=0i=0WHILE i<=9 S=S+1/2^i i=i+1ENDPRINT SEND运行该程序,输出:S=1.9980. 解析 分 析: 算法分析: 第一步 选择一个变量S表示和,并赋给初值0 再选取一个循环变量i,并赋值为0;第二步 开始进入WHILE循环语句,首先判断i是否小于9;第三步 为循环表达式(循环体) 用WEND来控制循环;第四步 用END来结束程序. 根据算法语句编写相应的程序语言,见参考答案.试题 解析: 算法步骤:第一步,要确定表示和的变量s和计数变量i,并赋值,一般情况下,赋s=0 i=0第二步,确定使用哪种循环结构,本题使用当型循环结构,确定判断条件i≤9 满足条件时,执行第三步,不满足条件时,执行第四步;第三步:执行,i=i+1第四步:输出s;程序结束.可写出程序如下:S=0i=0WHILE i<=9 S=S+1/2^i i=i+1ENDPRINT SEND运行该程序,输出:S=1.9980. (12分) 考点: 程序语言.算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是 *** 作实现的算法。一个算法应该具有以下五个重要的特征:1、有穷性: 一个算法必须保证执行有限步之后结束;2、确切性: 算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来如果没见过,那么考虑以下问题:当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来如果没见过,那么考虑以下问题:1. 问题是否是建立在某种已知的熟悉的数据结构(例如,二*树)上?如果不是,则要自己设计数据结构。2. 问题所要求编写的算法属于以下哪种类型?(建立数据结构,修改数据结构,遍历,查找,排序...)3.分析问题所要求编写的算法的数学性质.是否具备递归特征?(对于递归程序设计,只要设计出合理的参数表以及递归结束的条件,则基本上大功告成.)4.继续分析问题的数学本质.根据你以前的编程经验,设想一种可能是可行的解决办法,并证明这种解决办法的正确性.如果题目对算法有时空方面的要求,证明你的设想满足其要求.一般的,时间效率和空间效率难以兼得.有时必须通过建立辅助存储的方法来节省时间.5.通过一段时间的分析,你对解决这个问题已经有了自己的一些思路.或者说,你已经可以用自然语言把你的算法简单描述出来.继续验证其正确性,努力发现其中的错误并找出解决办法.在必要的时候(发现了无法解决的矛盾),推翻自己的思路,从头开始构思.6.确认你的思路可行以后,开始编写程序.在编写代码的过程中,尽可能把各种问题考虑得详细,周密.程序应该具有良好的结构,并且在关键的地方配有注释.7.举一个例子,然后在纸上用笔执行你的程序,进一步验证其正确性.当遇到与你的设想不符的情况时,分析问题产生的原因是编程方面的问题还是算法思想本身有问题.8. 如果程序通过了上述正确性验证,那么在将其进一步优化或简化。9. 撰写思路分析,注释.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------看不懂,还是不明白,有谁清楚告诉我啊,欢迎分享,转载请注明来源:内存溢出
评论列表(0条)