- 1
- 0
- 约5.39千字
- 约 28页
- 2026-03-10 发布于广西
- 举报
第17课冒泡排序与
插入排序
学习目标1、理解并掌握冒泡排序基本原理3、掌握冒泡排序与插入排序的基本使用2、理解并掌握插入排序基本原理
知识讲授
冒泡排序冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有元素再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换像气泡一样慢慢“浮”到数列的顶端。
冒泡排序规则每次比较相邻的元素,如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。经过一轮排序后,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每轮对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较,也就是已经是按照从小到大的顺序排列了。接下来我们以五个数字从小到大排序来演示冒泡排序的具体过程。
冒泡排序过程演示前面比后面大,交换前面比后面大,交换前面比后面大,交换第1次第2次第3次第4次第1次第2次第3次第1次第2次第1次1235991876第1轮需要4次比较第2轮需要3次比较第3轮需要2次比较第4轮需要1次比较一共有5个数,x,y表示第x个数和第y个数作比较。第一轮:比较4次1,22,33,44,5第二轮:比较3次1,22,33,4第三轮:比较2次1,22,3第四轮:比较1次1,2第一轮可以确定最大的数99第二轮可以确定次大的数76第三轮可以确定第三大的数35第四轮可以确定第四大的数18第五轮无需比较可以确定最小的数12
冒泡排序规律通过刚才的例子,我们应该发现了如下规律:每轮比较都会确定一个数字的位置,因此N个数字需要比较N-1轮。刚才5个数比较,第一轮比较了4次,第二轮比较3次,第三轮比较2次,第四轮比较1次,那么第i轮比较的次数为N-i次。每次比较均是对相邻两个数字作比较,直至最后。
参考代码#includeiostreamusingnamespacestd;intmain(){intn;inta[200];cinn;for(inti=1;i=n;i++)cina[i];for(inti=1;i=n-1;i++)//冒泡比较多少轮for(intj=1;j=n-i;j++)//第i轮比较n-i次;if(a[j]a[j+1])swap(a[j],a[j+1]);//只比较和交换相邻位置;for(inti=1;i=n;i++)couta[i];return0;}如果想从大到小排序,则把if(a[j]a[j+1])改成if(a[j]a[j+1]),让小的“冒泡”。
冒泡排序优化刚才对于序列{12,35,99,18,76}的排序过程中,我们不难发现,第二轮排序进行完之后,整个序列已经是有序的了,也就是说第二轮排序结束就可以不用接着进行接下来的比较了。因此我们可以对刚才的程序进行优化,那么什么时候就可以结束排序过程呢?根据观察,我们发现当某轮排序过程中没有交换的发生,那么就说明序列已经有序,无需再次比较了。
参考代码#includeiostreamusingnamespacestd;intmain(){intn;inta[200];cinn;for(inti=1;i=n;i++)cina[i];for(inti=1;i=n-1;i++){boolflag=0;//flag标记是否有交换 for(intj=1;j=n-i;j++){ if(a[j]a[j+1]){flag=1;//有交换发生则标记为1swap(a[j],a[j+1]);} } if(flag==0)break;//没有交换直接结束排序}for(inti=1;i=n;i++)couta[i];return0;}
课堂练习
【描述】给定一个长度为n(1=n=10000)的序列,问该序列中第k(1=k=n)小的元素是多少?用冒泡排序完成程序。【输入】输入共2行,第1行是n和k。后面1行是n个整数;【输出】1个数字。第k小的元素。【样例输入】32362【样例输出】3第k小的元素
您可能关注的文档
- C++编程《第001课 初识C++》教学设计.docx
- C++编程《第001课 初识C++》教学课件.pptx
- C++编程《第002课 变量和数据类型(1)》教学课件.pptx
- C++编程《第002课 变量和数据类型(1)》教学设计.docx
- C++编程《第003课 变量和数据类型(2)》教学设计.docx
- C++编程《第003课 变量和数据类型(2)》教学课件.pptx
- C++编程《第004课 选择与分支(1)》教学课件.pptx
- C++编程《第004课 选择与分支(1)》教学设计.docx
- C++编程《第005课 选择与分支(2)》教学课件.pptx
- C++编程《第005课 选择与分支(2)》教学设计.docx
- 河北盐山中学等校2025-2026学年上学期高三一模化学试卷(含解析).docx
- 河北正定中学2025-2026学年高一上学期期末考试物理试卷(含解析).docx
- 河北张家口市怀安县2025-2026学年第一学期期末教学综合评价八年级地理试卷(含解析).docx
- 河南安阳市殷都区2025-2026学年第一学期期末教学质量检测七年级地理试卷(含解析).docx
- 河南安阳市滑县2025一2026学年第一学期期末学业质量监测八年级地理试题(含解析).docx
- 河南安阳市林州市2025-2026学年上学期期末考试高一政治试题(含解析).docx
- 河南焦作市武陟县第一中学2025-2026学年高一上学期1月月考语文试卷(含解析).docx
- 河南济源市2025-2026学年上学期期末学业质量调研七年级历史试卷(含解析).docx
- PICC导管并发症的紧急处理与护理.pptx
- 河南鹤壁市2025-2026学年高二上学期期末考试生物试题(含解析).docx
最近下载
- 湖北省武昌某中学2024-2025学年高一年级下册3月月考数学试卷(解析).pdf VIP
- 综合应用能力事业单位考试(社会科学专技类B类)试题与参考答案.docx VIP
- HomeFacialPro+品牌手册(精品).pdf VIP
- 昆明市一中2026届高三年级12月第五次联考数学试卷(含答案详解).pdf
- 2025年国家开放大学(电大)《供应链管理》期末考试复习试题及答案解析.docx VIP
- 2025年广州市中考数学试题卷(含答案解析).docx
- 2025年重庆市中考化学试卷真题及答案.docx VIP
- 基于YOLOv5s的校园场景多目标巡检系统研究.pdf
- 跨越施工专题培训.pptx
- 2025【基于PID算法的温湿度控制系统的设计7200字(论文)】.docx VIP
原创力文档

文档评论(0)