0  418407  418415  418421  418425  418431  418433  418437  418443  418445  418451  418457  418461  418463  418467  418473  418475  418481  418485  418487  418491  418493  418497  418499  418501  418502  418503  418505  418506  418507  418509  418511  418515  418517  418521  418523  418527  418533  418535  418541  418545  418547  418551  418557  418563  418565  418571  418575  418577  418583  418587  418593  418601  447090 

7.将新数据列中的第7个数97与右边相邻的数49进行比较,因为49<97,97应下沉,所以顺序改变,得到新的数据列:

{38,49,65, 76, 13,97, 49,27}

我们把上述过程称为一趟排序。其基本特征是最大的数据沉到底,即排在最左边位置上的数据是数组中最大的数据。反复执行上面的步骤,就能完成排序工作,排序过程不会超过7趟。这种排序的方法称为冒泡排序。

上面的分析具有一般性,如果数据列有n个数据组成,至多经过n-1趟排序,就能完成整个排序过程。

试题详情

6.将新数据列中的第6个数97与右边相邻的数27进行比较,因为27<97,97应下沉,所以顺序改变,得到新的数据列:

{38,49,65, 76, 13,97,27,49}

试题详情

5.将新数据列中的第5个数97与右边相邻的数13进行比较,因为13<97,97应下沉,所以顺序改变,得到新的数据列:

{38,49,65, 76, 13,97,27,49}

试题详情

4.将新数据列中的第4个数97与右边相邻的数76进行比较,因为76<97,97应下沉,所以顺序不变,得到新的数据列:

{38,49,65, 76,97,13,27,49}

试题详情

3.将新数据列中的第3个数65与右边相邻的数97进行比较,因为97>65,所以顺序不变,得到新的数据列:

{38,49,65,97,76,13,27,49}

试题详情

2.将新数据列中的第2个数49与右边相邻的数65进行比较,因为65>49,所以顺序不变,得到新的数据列:

{38,49,65,97,76,13,27,49}

试题详情

1.将第1个数与右边相邻的数38进行比较,因为38<49,49应下沉,即向右移动,所以交换他们的位置,得到新的数据列:

{38,49,65,97,76,13,27,49}

试题详情

3.排序

排序的算法很多,课本主要介绍里两种排序方法:直接插入排序和冒泡排序

(1)直接插入排序

在日常生活中,经常碰到这样一类排序问题:把新的数据插入到已经排好顺序的数据列中。

例如:一组从小到大排好顺序的数据列{1,3,5,7,9,11,13},通常称之为有序列,我们用序号1,2,3,……表示数据的位置,欲把一个新的数据8插入到上述序列中。

完成这个工作要考虑两个问题:

(1)确定数据“8”在原有序列中应该占有的位置序号。数据“8”所处的位置应满足小于或等于原有序列右边所有的数据,大于其左边位置上所有的数据。

(2)将这个位置空出来,将数据“8”插进去。

对于一列无序的数据列,例如:{49,38,65,97,76,13,27,49},如何使用这种方法进行排序呢?基本思想很简单,即反复使用上述方法排序,由序列的长度不断增加,一直到完成整个无序列就有序了。

首先,{49}是有序列,我们将38插入到有序列{49}中,得到两个数据的有序列:

{38,49},

然后,将第三个数据65插入到上述序列中,得到有序列:

{38,49,65}

…………

按照这种方法,直到将最后一个数据65插入到上述有序列中,得到

{13,27,38,49,49,65,76,97}

这样,就完成了整个数据列的排序工作。注意到无序列“插入排序算法”成为了解决这类问题的平台。

(2)冒泡法排序

所谓冒泡法排序,形象地说,就是将一组数据按照从小到大的顺序排列时,小的数据视为质量轻的,大的数据视为质量沉的。一个小的数据就好比水中的气泡,往上移动,一个较大的数据就好比石头,往下移动。显然最终会沉到水底,最轻的会浮到顶,反复进行,直到数据列排成为有序列。以上过程反映了这种排序方法的基本思路。

我们先对一组数据进行分析。

设待排序的数据为:{49,38,65,97,76,13,27,49}

排序的具体操作步骤如下:

试题详情

2.秦九韶算法

秦九韶算法的一般规则:

秦九韶算法适用一般的多项式f(x)=anxn+an-1xn-1+….+a1x+a0的求值问题。用秦九韶算法求一般多项式f(x)= anxn+an-1xn-1+….+a1x+a0当x=x0时的函数值,可把n次多项式的求值问题转化成求n个一次多项式的值的问题,即求

v0=an

v1=anx+an-1

v2=v1x+an-2

v3=v2x+an-3

……..

vn=vn-1x+a0

观察秦九韶算法的数学模型,计算vk时要用到vk-1的值,若令v0=an

我们可以得到下面的递推公式:

v0=an

vk=vk-1+an-k(k=1,2,…n)

这是一个在秦九韶算法中反复执行的步骤,可以用循环结构来实现。

试题详情

1.求最大公约数

(1)短除法

求两个正整数的最大公约数的步骤:先用两个数公有的质因数连续去除,一直除到所得的商是两个互质数为止,然后把所有的除数连乘起来。

(2)穷举法(也叫枚举法)

穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。

(3)辗转相除法

辗转相除法求两个数的最大公约数,其算法可以描述如下:

① 输入两个正整数m和n;

② 求余数r:计算m除以n,将所得余数存放到变量r中;

③更新被除数和余数:m=n,n=r;

④判断余数r是否为0。若余数为0,则输出结果;否则转向第②步继续循环执行。

如此循环,直到得到结果为止。

(4)更相减损术

我国早期也有解决求最大公约数问题的算法,就是更相减损术。在《九章算术》中记载了更相减损术求最大公约数的步骤:可半者半之,不可半者,副置分母•子之数,以少减多,更相减损,求其等也,以等数约之。

步骤:

Ⅰ.任意给出两个正数;判断它们是否都是偶数。若是,用2约简;若不是,执行第二步。

Ⅱ.以较大的数减去较小的数,接着把较小的数与所得的差比较,并以大数减小数。继续这操作,直到所得的数相等为止,则这个数(等数)就是所求的最大公约数。

试题详情


同步练习册答案