冒泡法排序c语言算法步骤,冒泡排序 - 数据结构与算法教程 - C语言网
1.复杂度与稳定性
算法时间复杂度
最坏情况:O(n^2)
最好情况:O(n)
平均情况:O(n^2)
空间复杂度:S(n)=O(1)
稳定性:稳定排序
2.过程介绍(以顺序为例)
1.从第一个元素开始逐个比较相邻的元素。如果第一个比第二个大(a[1]>a[2]),就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。此时在这一点,最后的元素应该会是最大的数,我们也称呼一遍这样的操作为:一趟冒泡排序。
3.针对所有的元素重复以上的步骤,每一趟冒泡排序的最大值已放在最后,下一次操作则不需要将此最大值纳入计算计算。
4.持续对每次对越来越少的元素,重复上面的步骤,直到没有任何一对数字需要比较,即完成冒泡排序。
3.图示过程
以数组数据{ 70,50,30,20,10,70,40,60}为例:开始数据7050302010704060
第一趟5030201070406070
第二趟3020105040607070
第三趟2010304050607070
第四趟1020304050607070
第五趟1020304050607070
第六趟1020304050607070
第七趟1020304050607070
如此图,每一次排序结尾,总有一个最大的数被放在了最后,然后这个趋势逐渐往前,但是,到了第四趟的时候,其实我们整个数据已经排序结束了,但是此时我们的程序还在进行,直到第5,6,7趟结束程序才算真正的结束,这其实是一种浪费算力的表现。
4.相关的代码#include
using namespace std;
void bubble_sort(int a[],int n) {
for(int i=0; i
for(int j=0; j
if(a[j]>a[j+1]) {
swap(a[j],a[j+1]); //交换数据
}
}
}
}
int main() {
int a[8]= {70,50,30,20,10,70,40,60};
int n=7;
bubble_sort(a,n);
for(int i=0; i<=n; i++) {
cout<
}
return 0;
}
在这里提示一下,由于C++的namespace std命名空间的使用,std自带了交换函数swap(a,b),我们可以直接使用,其功能是交换a与b的两个值,在教程后面的排序中会经常用到,当然你可以自定义swap函数,其模板代码为:template //模板类,可以让参数为任意类型
void swap(T &a,T &b) {
T c(a);
a=b;
b=c;
}
或者指定类型修改为整形,如:void swap(int &a, int &b) { //指定类型
int temp = a;
a = b;
b = temp;
}
那么我们的冒泡排序就算学完了,其实冒泡排序是八大排序中最简单及基础的排序,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡法排序c语言算法步骤,冒泡排序 - 数据结构与算法教程 - C语言网相关推荐
- C语言算法:冒泡法排序
C语言 冒泡法排序 要点:如果要对 N 个数 进行冒泡排序,那么要进行 N-1 趟 比较,在第1 趟比较中 要 进行 N-1 次两两 比较,(C语言中的数值比较 每次只能在 两个数之间),推而广之,在 ...
- C语言 冒泡法排序,选择法排序和插入排序
实例1 冒泡法排序 数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序. 实例解析: 排序是非常重要且很常用的一种操作,有冒泡排序.选择排序.插入排序.希尔排序.快速排序.堆排序等多种方法.这 ...
- PTA 基础编程题目集 7-27 冒泡法排序 C语言
PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...
- c语言冒泡法排序实验报告,四川大学微机原理冒泡法排序实验报告.doc
四川大学微机原理冒泡法排序实验报告四川大学微机原理冒泡法排序实验报告 <微机原理与接口技术实验报告> 学 院: 电气信息学院 班 级: 电力 老 师: 学 号: 姓 名: 目 录 实验目的 ...
- C语言冒泡法排序——凭空出现的“26”
如果给你一连串的数字让你按照从小到大的顺序排列你会怎么办呢?挨个比较吗?我这有一种好玩的排序方法叫做冒泡排序.其实,冒泡法排序是C 语言中,较经典的一种排序方法.哈哈哈,经典不经典我不知道,反正我接触 ...
- C语言——冒泡法排序应用
#include <stdio.h> #include <stdlib.h> int main()/*有int main 就会有return 0;如果是void main ,就 ...
- 7-27 冒泡法排序 (C语言)
7-27 冒泡法排序 (20 分)将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一个元素必定是最大的元 ...
- C语言 数组排序 – 冒泡法排序 - C语言零基础入门教程
目录 一.简介 二.数组冒泡法排序原理 三.数组冒泡法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...
- C语言数组的五种简单排序,选择法排序,冒泡法排序、交换法排序、插入法排序、折半法排序
文章目录 1.选择法排序 2.冒泡法排序 3.交换法排序 4.插入排序 5.折半法排序 6.五种方法比较 1.选择法排序 选择法排序是指每次选择索要排序的数组中的最小值(这里是由小到大排序,如果是由大 ...
最新文章
- php 嵌套while循环,PHP/SQL在嵌套while循环中替代db调用
- 1200+标星,3千多人点赞,这本书让你系统了解机器学习可解释性丨开源免费阅读...
- 交大计算机基础知识第一次作业,上海交大计算机第一次作业
- 微变等效电路法分析放大电路
- 【LeetCode】Maximum Product Subarray 求连续子数组使其乘积最大
- idea中本地git如何切换分支
- python模块之subprocess
- 千兆以太网RJ45接口连线引脚定义
- Matlab读取处理Excel数据并拟合正态分布曲线
- 跨专业北邮计算机考研,北京邮电大学跨专业考研心得
- 互联网产品经理核心素质能力模型
- HTML5的骨架是什么,HTML5 骨架
- Windows安全加固简介
- 2014年360广告算法面试经历
- swap分区、硬盘和磁盘
- Ubuntu 16.04下载编译Android11源码
- IDA7.7PJ版本
- 乌班图安装docker
- 开发工具|DingStudio1.1.0发布
- “AttributeError: type object ‘RocCurveDisplay‘ has no attribute ‘from_predictions‘ “.
热门文章
- fastdfs笔记_fastdfs基于group的扩容
- 高质量UI面试作品模板,大大提高通过效率
- 电商活动难么多,不怕一个电商素材网站解救你,赶紧收藏
- mysql 5.7 源码编译安装_mysql-5.7.*源码编译安装
- 拓扑检查中的一些问题(为啥没自相交)
- ELF应用程序二进制接口
- Why Open vSwitch?
- VPP /什么是VPP?读这篇文章就够了
- 【转】5G EN-DC/NE-DC/NGEN-DC构架
- __attribute__ ((__pure__))