数组与冒泡排序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 49 38 65 97 76 27 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 27 49 49 27 38 38 27 65 65 27 97 97 27 76 76 27 59
结束
d[ j ]<d[ j-1 ] t ← d[ j ] d[ j ] ← d[ j-1 ] d[ j-1 ] ← t
j←j-1
3、j递减1,转回步骤2;
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 49 38 65 97 76 13 27 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
数组
i→ j-1→ d[1] j-1→ j→ j-1→ j→ j-1→ j→ j-1→ j→ j-1→ j→ j-1→ j→ j→
值 13 49 49 38 13 38 13 65 65 13 97 97 13 76 76 13 27 59
13<49 交换 13<38 交换 13<65 交换 13<97 交换 13<76 交换 27>13 不交换 59>27 不交换 i→
数组变量名称
数组元素下标
开始பைடு நூலகம்
输入n 输入 计数器i←1 计数器
开始
输入n 输入 计数器i←1 计数器
i≤8? i≤n? ?
输入A 输入
i≤8? i≤n? ?
输出d[i] 输出
结束
d[ i ]←A
结束
i←i+1
i←i+1
某些问题的处理过程依赖于数据的有序性, 某些问题的处理过程依赖于数据的有序性,把杂乱无章的数 排序。 据变为有序的数据,这一过程称为排序 据变为有序的数据,这一过程称为排序。 排序是计算机程序经常使用的基本算法, 排序是计算机程序经常使用的基本算法,也是日常应用问题 中经常要用到的一种数据处理方法。例如: 中经常要用到的一种数据处理方法。例如:考试结束后对学 生成绩进行排名次,就是典型的排序算法的应用。 生成绩进行排名次,就是典型的排序算法的应用。 1.观察水中的气泡往上冒的情景, 1.观察水中的气泡往上冒的情景, 观察水中的气泡往上冒的情景 气泡往上冒的时候有什么特点呢? 气泡往上冒的时候有什么特点呢?
值 49 38 65 97 13 76 27 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 49 38 65 13 97 76 27 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 49 38 13 65 97 76 27 59
13<49 交换 13<38 交换 13<65 交换 13<97 交换 13<76 交换 27>13 不交换 59>27 不交换
第一趟排序,一共进行 了多少次比较? 7次 规模为n的数组,第一 趟排序,一共进行了多 少次比较? (n-1)次 对比原数据经过第一趟排 序,实现了什么目的? 第一趟排序实现了将最小 的数浮到了第一个数组元 素中(即d[1]中)!
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 49 38 65 97 76 13 27 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 49 49 38 13 38 13 65 65 13 97 97 13 76 76 13 27 59
2. 第一次上体育课集队的时候体 育老师是怎么样帮我们按身材的高 低顺序进行排队的? 低顺序进行排队的?
冒泡排序的原理
冒泡排序(bubble sort)是一种直接交换的排序技术。 冒泡排序算法把待排序的n个元素的数组看成是垂直堆 放的一列数据,从最下面的一个元素起,自下而上地比 较相邻的两个元素中的数据,将较小的数换到上面的一 个元素中。重复这一过程,直到处理完最后两个元素中 的数据,称为一遍加工。当第一遍加工完成时,最小的 数据已经上升到第一个元素的位置。然后对余下的(n1)个元素重复上述处理过程,直至最后进行余下两个 数据的比较和交换。 由于每一遍加工都是将本遍最小的元素像气泡一样上浮 至本遍的顶端位置,故称为冒泡排序。
数组 d[1]
j-1→ d[2] j-1→ d[3] j→ j-1→ d[4] j→ j-1→ d[5] j→ j-1→ d[6] j→ j-1→ d[7] j→ j→
值 13 27 49 49 27 38 38 27 65 65 27 97 97 27 76 76 27 59
27<49 交换 27<38 交换 27<65 交换 27<97 交换 27<76 交换 59>27 不交换
以此类推下去: 规模为8的数组经过 7 遍加工即可完成排序 (n-1) 规模为n的数组经过 遍加工即可完成排序 (n-i) 在第 i 遍加工中,共需进行 次比较
在冒泡排序的每一遍处理过程中,我们使用变量i来表示本遍处理范围的最上方数组元素 的下标,第1遍处理时,i的值为1;第2遍处理时,i的值为2,以此类推,i逐次递增1。 因为规模为n的数组经过(n-1)遍加工即可完成排序,故i的最大值为(n-1)。 故i的取值范围是[ 1, (n-1) ],i逐次递增1。 冒泡排序的的每一遍处理过程是自下而上比较相邻的两个数组元素的大小,我们以变量j 与j-1来表示这两个相邻的数组元素,d[ j ]代表下方的数组元素, d[ j-1 ]则代表了上面的 那个数组元素,j的初值应该是该数组的最下方的数组元素的下标(即 j的初值为n)。 按照自下而上的比较过程, j的值应该是逐次递减1的,最后一次进行比较的是该遍处理 范围中最上方的两个数组元素,此时,j的取值应为(i+1)。 故在每一遍的处理过程中,j的取值范围是[ n, (i+1) ],j逐次递减1。 如果按照非递减方式排序,则“小数上,大数下”,故当条件d[ j ]<d[ j-1 ]成立时,应交 换d[ j ]与d[ j-1 ]中的值,此时应采用如下步骤: t ← d[ j ] d[ j ] ← d[ j-1 ] d[ j-1 ] ← t
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 49 13 38 65 97 76 27 59
数组 数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] 值 d[1] 13 49 38 65 97 76 27 59 d[2] d[3] d[4] d[5] d[6] d[7] d[8]
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 49 27 38 65 97 76 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
开始
输入n 输入 计数器i←1 计数器
开始
输入n 输入 计数器i←1 计数器
i≤n? ?
27<49 交换 27<38 交换 27<65 交换 27<97 交换 27<76 交换 59>27 不交换
第2趟排序,一共进行 了多少次比较? 6次 规模为n的数组,第2趟 排序,一共进行了多少 次比较? (n-2)次 对比第1趟排序后的数 据,经过第2趟排序, 实现了什么目的? 第2趟排序实现了将第 二小的数浮到了第二个 数组元素中(即d[2] 中) !
数组变量是一种特殊的、十分有用的变量。规模为 的数组变量是 数组变量是一种特殊的、十分有用的变量。规模为n的数组变量是 是一种特殊的 个普通的变量组成的, 由n个普通的变量组成的,通常我们把组成数组的变量称为数组的 个普通的变量组成的 通常我们把组成数组的变量称为数组的 元素,一个数组变量中的所有元素拥有一个共同的名称,通过下标 元素,一个数组变量中的所有元素拥有一个共同的名称,通过下标 一个从1到 范围内的整数值 指出数组变量中的特定元素。 范围内的整数值) (一个从 到n范围内的整数值)指出数组变量中的特定元素。 实际上,下标指出了一个数组元素在数组变量中的位置 指出了一个数组元素在数组变量中的位置。 实际上,下标指出了一个数组元素在数组变量中的位置。下标可以 用一个正整数值、一个变量或一个表达式来表示。 用一个正整数值、一个变量或一个表达式来表示。 通常,用数组变量来存储一批类型、作用相同的数据。 通常,用数组变量来存储一批类型、作用相同的数据。
d[2] d[3] d[4] d[5] d[6] d[7] d[8]
d[8]
开始 i←1
否则,说明所有(n-1)处理均 完成,数组完成排序,算法结束。
i ≤(n-1) j←n i←i+1 j≥ (i+1) i+1
当条件j ≥(i+1)不 成立,说明该遍处理 已经完成。此时,应 下一遍的处理。具体 步骤如下: 1、i增加1; 2、判断条件i≤(n-1) 是否成立 若成立,开始进行 下一遍的处理。 对于每遍处理,我们让变量j从 n开始逐次递减到(i+1),对 于相邻的两个数组元素d[j]和 d[j-1],判断d[j]<d[j-1] 是否成立。具体步骤如下: 1、变量j置初值n; 2、判断条件j ≥(i+1)是否成 立,若成立,继续判断 d[j]<d[j-1]是否成立 条件成立,交换d[j]与 d[j-1]中的值
值 13 49 38 65 97 27 76 59
59>27 不交换
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 49 38 65 27 97 76 59
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8]
值 13 49 38 27 65 97 76 59
例:用冒泡排序的方法将下面一组无序数组按 非递减次序排序。 非递减次序排序。
数组 d[1] d[2] d[3] d[4] d[5] d[6] d[7] d[8] 值 49 38 65 97 76 13 27 59
分析:首先为了方便分析, 分析:首先为了方便分析,我们把所给的数据 先用一个表格列出来,如下: 先用一个表格列出来,如下:
输入A 输入
i≤n? ?
结束
d[ i ]←A
输出d[i] 输出d[i]
结束
i←i+1
i←i+1
相关文档
最新文档