排序算法——冒泡排序
大家好!我们又见面了!计算机代码的实现都是靠一个一个算法实现的,今天就给小伙伴们介绍一种非常简单的算法---冒泡排序,冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它反复的将需要排序的数列一直两两进行排序,每次只比较两个元素,如果顺序不对就将他们交换,重复进行直到没有元素还需要交换,此时,也就表示数列的排序已经完成。这个算法名字的由来是因为小的元素会像“泡泡”一样通过一次次交换慢慢的“浮”到数列的最顶端位置。作为最简单的算法之一,与我们而言就好像在四级词汇中看到“abandon”一样,非常简单但是常见,因此最为我们熟悉。
可能文字对于这种算法描述还是太过生涩难懂,那么我将具一个通俗易懂的例子:
有数组arr[10]={10,9,8,7,6,5,4,3,2,1}这样十个整形的数字,此时我们需要从小到大进行排序,我们选择采取冒泡排序。
10 9 8 7 6 5 4 3 2 1 10与9进行比较,发现10>9,则改变数组为9 10 8 7 6 5 4 3 2 1;
9 10 8 7 6 5 4 3 2 1 再10与8进行比较,发现10>8,则改变数组为9 8 10 7 6 5 4 3 2 1;
9 8 10 7 6 5 4 3 2 1 再10与7进行比较,发现10>7,则改变数组为9 8 7 10 6 5 4 3 2 1;
9 8 7 10 6 5 4 3 2 1 再10与6进行比较,发现10>6,则改变数组为9 8 7 6 10 5 4 3 2 1;
9 8 7 6 10 5 4 3 2 1 再10与5进行比较,发现10>5,则改变数组为9 8 7 6 5 10 4 3 2 1;
......
最终结果变成9 8 7 6 5 4 3 2 1 10,这时仅仅只是完成了第一轮冒泡排序。
当数组arr变成9 8 7 6 5 4 3 2 1 10时,开始第二轮冒泡排序。
9 8 7 6 5 4 3 2 1 10 9与8进行比较,发现9>8,则改变数组为8 9 7 6 5 4 3 2 1 10;
8 9 7 6 5 4 3 2 1 10 再9与7进行比较,发现9>7,则改变数组为8 7 9 6 5 4 3 2 1 10;
8 7 9 6 5 4 3 2 1 10 再9与6进行比较,发现9>6,则改变数组为8 7 6 9 5 4 3 2 1 10;
8 7 6 9 5 4 3 2 1 10 再9与5进行比较,发现9>5,则改变数组为8 7 6 5 9 4 3 2 1 10;
8 7 6 5 9 4 3 2 1 10 再9与4进行比较,发现9>4,则改变数组为8 7 6 5 4 9 3 2 1 10;
......
最终结果变成8 7 6 5 4 3 2 1 9 10,这时完成了第二轮冒泡排序。
当数组arr变成8 7 6 5 4 3 2 1 9 10时,开始第三轮冒泡排序。
我们不难发现结果最终成为了7 6 5 4 3 2 1 8 9 10。
......
最终经过9轮排序最终成功得到1 2 3 4 5 6 7 8 9 10。
通过这个例子大家肯定明白冒泡排序到底是怎么一回事,大家想想看这个排序方法什么时候最快?什么时候最慢?当它正序排序的时候最快,因为根本不需要,冒泡排序,而上面的例子(反序)这个时候就是最慢,此时我们写个for循环不应该更快吗?其实并不是没有道理,所以冒泡排序其实很简单也很“笨”。不过这样“笨笨的”冒泡排序也并不是毫无优点可言,不然它就没有存在的必要。
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:Cmin=n-1,Mmin=0。所以,冒泡排序最好的时间复杂度为O(n)。若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为O(n^2) 。综上,因此冒泡排序总的平均时间复杂度为O(n^2)。
算法稳定性
#include <stdio.h>
#include <string.h>
void Sort(int *arr, int sz)
{int i = 0;//趟数for (i = 0; i < sz-1; i++){int j = 0;//每次冒泡排序都会使得最后一个数正确,每趟需要两两比较的次数都会减1for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
int main()
{int arr[] = { 8,5,1,7,9,4,0,3,2,6 };int sz = sizeof(arr) / sizeof(arr[0]);Sort(arr, sz);int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
那么到这里给大家分享的第一种算法到这里也就结束了,欢迎大家点赞收藏!
排序算法——冒泡排序相关推荐
- C语言基础排序算法-冒泡排序
C语言基础排序算法-冒泡排序 什么是冒泡排序? 顾名思义,这种排序方法就像水中的气泡一样,从底逐渐往上冒,一次前进一步.我们来看一个例子,看看到底是怎么冒泡的.假设有一个数组3,2,5,4,1,我们希 ...
- 经典排序算法 - 冒泡排序Bubble sort
经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...
- 排序算法——冒泡排序(Bubble Sort)
排序算法--冒泡排序(Bubble Sort) 算法简介(Introduction) Bubble sort is to compare adjacent elements of the list a ...
- python排序算法 ——冒泡排序(附代码)
python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...
- 十大经典排序算法-冒泡排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 排序算法---冒泡排序(java版)
冒泡排序 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过依次比较两个相邻的的元素,看两个元素是否满足大小关系要求,如果不满足则交换两个元素.每一次冒泡会让至少一个元素移动到它应该 ...
- 排序算法--冒泡排序的首尾改进
在排序算法中,冒泡排序是一个很经典的算法,最初的冒泡排序一直要运行n-1次,但是其中有些事不必要的操作,例 如,当没有两个数据发生交换时,就可以结束运行. 本文介绍的一种方法是对上述条件的改进,即不仅 ...
- 排序算法 —— 冒泡排序
基本思想 n个元素,从第1个开始,依次比较相邻的两个是否逆序对(大在前,小在后),若逆序就交换两个元素,即第1个和第2个比,若逆序就交换两个元素,接着第2个和第3个比,若逆序就交换两个元素,接着第3个 ...
- 深入浅出的排序算法-冒泡排序
前言 大家好,给大家带来冒泡排序算法,希望你们喜欢 冒泡排序 为什么这个排序要叫冒泡呢?为什么不叫其他名词呢?其实这个取名是根据排序算法的基本思路命名的,见名知意,冒泡排序,就是想泡泡在水里一样,在水 ...
- 排序算法-冒泡排序算法
2019独角兽企业重金招聘Python工程师标准>>> 冒泡排序算法是所有排序算法中最简单.最基础的一种.冒泡排序算法的思路就是交换排序,通过相邻数据的交换来达到排序的目的. 冒泡排 ...
最新文章
- 随机位置显示图片不重叠前端实现详细讲解附效果图,代码可直接使用
- 多尺度人脸检测--Face Detection through Scale-Friendly Deep Convolutional Networks
- 编程之美-24点游戏方法整理
- Eclipse 高亮显示选中的相同变量
- 五大地形等高线特征_高中地理学习中如何快速掌握等高线地形图
- linux下安装oracle 11g R2
- Halcon算子学习:smooth_object_model_3d
- Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
- ubuntu14.04 配置jdk环境变量
- 如何在 macOS 上安装Axure RP
- 计算机打表格图,怎么把电脑整个表格截屏,表格太长,还有部(怎么把excle表格截图)...
- linux yum clean up,在CentOS系统中使用package-cleanup清除旧内核
- java的程序的创建快捷方式_关于Swing:如何为Java程序创建快捷方式图标
- 如何将汉字写得又好又快
- PHP - 命名空间(namespace)概述及实例说明
- 【金猿产品展】星环KunDB ——助力企业数字化转型的高性能分布式交易型数据库...
- 太极拳经验谈 --- 董英杰
- Soul(灵魂)匹配脚本、autojs、按键精灵~
- 全网最全持续集成接口自动化-jmeter+ant+jenkins
- Fabric学习(一) — 区块链及相关技术介绍