数据结构——排序之冒泡排序

这篇具有很好参考价值的文章主要介绍了数据结构——排序之冒泡排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💞💞 前言

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
数据结构——排序之冒泡排序,数据结构,排序合集,每日一函数,数据结构,排序算法,算法,c语言

💥个人主页:大耳朵土土垚的博客
💥 所属专栏:数据结构学习笔记 、排序算法合集
💥对于数据结构顺序表、链表、堆有疑问的都可以在上面数据结构的专栏进行学习哦~ 有问题可以写在评论区或者私信我哦~

前面我们学习过四种排序——直接插入排序、希尔排序、直接选择排序和堆排序,今天我们就来学习交换排序的一种——冒泡排序。

1.什么是冒泡排序?

冒泡排序(BubbleSort)是一种计算机科学领域的较简单的排序算法。它的基本思想是通过重复遍历待排序的数据集,并依次比较相邻的两个数据项,如果它们的顺序错误则进行交换。这个过程会持续重复直到所有相邻的数据项都已经交换完毕,此时说明该数据集已经排好序。冒泡排序的名称来源于排序过程中,较小的数据项会被逐渐“浮”到数组顶部,这个过程就像碳酸饮料中二氧化碳气泡最终会上浮到顶部的现象一样。因此,这种排序算法因其这一特性而得名。

冒泡函数的核心思想就是:两两相邻的元素进行比较,一轮下来最大的或者最小的就会被交换到最后面,每一轮都得到该轮的最值排到后面,如果是升序就得到最大值,降序就是最小值,排n轮直到有序。

如下动图演示:

数据结构——排序之冒泡排序,数据结构,排序合集,每日一函数,数据结构,排序算法,算法,c语言

2.冒泡排序代码实现(升序)

2.1基础版(升序)

void bubble_sort(int arr[], int sz)//参数接收数组元素个数
 
{
 for(int i=0; i<sz-1; i++)//排sz-1趟
 
 {
 for(int j=0; j<sz-i-1; j++)//一趟排序
 
 {
 if(arr[j] > arr[j+1])//前面的大就交换到后面,直到最后得到升序
 
 {
 //交换
 int tmp = arr[j];
 
 arr[j] = arr[j+1];
 
 arr[j+1] = tmp;
 
 }
 
 }
 
 }
 
}
//打印数据 
int main()
 
{
 
 int arr[] = {3,1,7,5,8,9,0,2,4,6};
 
 int sz = sizeof(arr)/sizeof(arr[0]);
 
 bubble_sort(arr, sz);
 
for(int i=0; i<sz; i++)
 
 {
 
 printf("%d ", arr[i]);
 
 }
 
 return 0;
 
}

这里注意使用两层for循环嵌套来实现,一层用来实现一趟排序所要进行的步骤,最外层for循环则表示这样的步骤要实现size-1次才能得到有序,每一趟排序都得到最值,排到后面,直到有序。

结果如下:
数据结构——排序之冒泡排序,数据结构,排序合集,每日一函数,数据结构,排序算法,算法,c语言

2.2进阶版(升序)

进阶实现

我们发现上述代码即使在排序过程中有序了,该跑size-1趟还是不会少,它才不管你有没有序,我只要跑我的size-1趟就好了,这样就会大大消耗我们的时间,所以我们的想个方法一旦它有序冒泡排序就停下;

解决思路

我们可以思考它什么是会有序呢?是不是一趟下来什么都没交换这样就可以判定为有序了,所以我们可以使用一个变量flag来标记。代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void bubble_sort(int arr[], int sz)//参数接收数组元素个数

{
	for (int i = 0; i < sz - 1; i++)//排sz-1趟

	{
		int flag = 0;//没趟排序开始flag清0
		for (int j = 0; j < sz - i - 1; j++)//一趟排序

		{
			if (arr[j] > arr[j + 1])//前面的大就交换到后面,直到最后得到升序

			{
				flag++;//有交换flag就++
				//交换
				int tmp = arr[j];

				arr[j] = arr[j + 1];

				arr[j + 1] = tmp;

			}

		}
		//一趟排序后查看flag值
		if (flag == 0)//如果flag = 0 ,也就是没有发生交换直接return即可
			return;

	}

}
//打印数据 
int main()

{

	int arr[] = {9,1,2,3,4,5,6,7,8};

	int sz = sizeof(arr) / sizeof(arr[0]);

	bubble_sort(arr, sz);

	for (int i = 0; i < sz; i++)

	{

		printf("%d ", arr[i]);

	}

	return 0;

}

将flag设在每趟排序里面,如果有交换flag就++;没有flag值就是0说明此时有序可以直接返回;注意不要忘了每趟排序完flag都要清0哦~不然下次使用即时没有发生交换flag也不为0;

使用int arr[] = {9,1,2,3,4,5,6,7,8};来测试结果如下:
数据结构——排序之冒泡排序,数据结构,排序合集,每日一函数,数据结构,排序算法,算法,c语言

3.冒泡排序代码实现(降序)

学习完升序,降序对我们来说简直是老虎吃豆芽——小菜一碟,只需将交换的条件由大于改成小于号即可

if (arr[j] < arr[j + 1])//前面的小就交换到后面,直到最后得到升序

完整代码实现如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void bubble_sort(int arr[], int sz)//参数接收数组元素个数

{
	for (int i = 0; i < sz - 1; i++)//排sz-1趟

	{
		int flag = 0;//没趟排序开始flag清0
		for (int j = 0; j < sz - i - 1; j++)//一趟排序

		{
			if (arr[j] < arr[j + 1])//前面的小就交换到后面,直到最后得到升序

			{
				flag++;//有交换flag就++
				//交换
				int tmp = arr[j];

				arr[j] = arr[j + 1];

				arr[j + 1] = tmp;

			}

		}
		//一趟排序后查看flag值
		if (flag == 0)//如果flag = 0 ,也就是没有发生交换直接return即可
			return;

	}

}
//打印数据 
int main()

{

	int arr[] = {9,1,2,3,4,5,6,7,8};

	int sz = sizeof(arr) / sizeof(arr[0]);

	bubble_sort(arr, sz);

	for (int i = 0; i < sz; i++)

	{

		printf("%d ", arr[i]);

	}

	return 0;

}

结果如下:
数据结构——排序之冒泡排序,数据结构,排序合集,每日一函数,数据结构,排序算法,算法,c语言

4.冒泡排序时间复杂度分析

时间复杂度往往分析最坏的情况,所以在分析冒泡排序时我们可以当作冒泡了size-1次,假设有n个数,也就是n-1次,每次又两两相比较,第一次比较n-1下,第二次n-2…最后一次1下,将这n-1次加起来就可以知道冒泡排序的时间复杂度啦~ 利用等差数列求和很容易算出来结果并区取最大的数量级n^2即可;
🥳🥳所以冒泡排序的时间复杂度是O(n^2)

5.结语

以上就是有关冒泡排序的所以内容啦~ 有问题的或者不懂的可以写在评论区或者私信我哦 ~ 完结撒花~🥳🥳🎉🎉🎉文章来源地址https://www.toymoban.com/news/detail-848474.html

到了这里,关于数据结构——排序之冒泡排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构算法--2 冒泡排序,选择排序,插入排序

    思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序

    2024年02月13日
    浏览(32)
  • (搞定)排序数据结构(1)插入排序 选择排序+冒泡排序

    目录 本章内容如下    一:插入排序                               1.1插入排序                   1.2希尔排序     二:选择排序                    2.1选择排序  三:交换排序                    3.1冒泡排序         1.1直接插入排序   

    2024年02月07日
    浏览(38)
  • 【数据结构--八大排序】之冒泡排序+选择排序+插入排序

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 🔸每次从a]0]开始,

    2024年02月07日
    浏览(50)
  • 数据结构(c)冒泡排序

     本文除了最下面的代码是我写的,其余是网上抄写的。   冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排

    2024年01月17日
    浏览(21)
  • 【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

    前言:生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和

    2024年02月04日
    浏览(31)
  • 【数据结构初阶】八大排序(二)——快速排序&&冒泡排序

    大家好我是沐曦希💕 书接【数据结构初阶】八大排序(一)——希尔排序堆排序直接插入排序直接选择排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是: 将键值较大的记录向序列的尾部移动,键值较小

    2024年02月21日
    浏览(36)
  • 【数据结构】 七大排序详解(贰)——冒泡排序、快速排序、归并排序

    ==冒泡排序(Bubble Sort)==也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会

    2024年02月09日
    浏览(39)
  • [数据结构 -- 手撕排序第三篇] 冒泡排序

    目录 1、常见的排序算法 1.1 交换排序基本思想 2、冒泡排序的实现 2.1 基本思想 2.2 单趟排序 2.2.1 单趟排序分析 2.2.2 单趟排序实现代码 3、冒泡排序完整代码实现 3.1 思路分析 3.2 代码实现 4、时间复杂度 5、优化算法 5.1 优化算法思路 5.2 优化算法代码实现 6、冒泡排序的特性总

    2024年02月13日
    浏览(33)
  • 【数据结构与算法】十大经典排序算法-冒泡排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌴 掘金 :HelloCode 🌞 知乎 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻元素的位置来将最大(或最小)的元素逐步“冒泡”到

    2024年02月14日
    浏览(46)
  • 数据结构奇妙旅程之冒泡排序

    冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢

    2024年03月26日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包