C++常见排序算法——冒泡排序算法

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

首先说一下冒泡排序的基本算法思想:

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

以从小到大排序为例:a[5]={3,5,4,1,0};

  1. 先将3和5进行比较,已经是我们需要的正序,不需要交换位置;
  2. 再将5和4进行比较,不是正序,相互交换顺序,序列变为{3,4,5,1,0}。
  3. 再将5和1进行比较,不是正序,相互交换顺序,序列变为{3,4,1,5,0}。
  4. 再将5和0进行比较,不是正序,相互交换顺序,序列变为{3,4,1,0,5}。

至此,第1轮冒泡就已经完成了,最大值5到了序列的最后面。

由于5的位置已经排好序,所以第2轮,5不再参与排序,将{3,4,1,0}置为有序序列即可。

假设数组元素个数为n,从上面第1轮的比较来看,我们可以得出如下结论:

  1. 我们将冒泡排序的轮数设为 i ,每完成1轮冒泡排序,就会增加一个元素处于有序状态,所以在 (n-1) 轮排序结束后,就会有 n-1 个元素处于有序状态,而剩下的最后一个元素,自然是最小(大)值,不用再进行排序,所以,冒泡排序比较的轮数为 (n-1) 
  2. 我们将每轮需要比较的次数设为 j ,第1轮( i 值为0)需要比较的次数为4,从 {3,4,1,0} 中不难看出,第2轮( i 值为1)需要比较的次数为3次,说明每轮比较的次数 j 与冒泡的轮数  i  值有关,且 j = n-i-1

确定好上面两条结论以后,我们开始用代码实现冒泡排序算法:

#include <iostream>
using namespace std;
//对a[]进行正序(从小到大)排序
void bubblesort(int *a,int len)	//形参a取到实参a传递过来的数组首地址
                                //然后解引用,取到数组的值 
{
	for (int i=0;i<len-1;i++)	//i控制排序的轮数 
	{
		for (int j=0;j<len-i-1;j++)	//j控制每轮需要比较的次数 
		{
			if(a[j+1]<a[j])	//不满足正序要求,交换顺序 
			{
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}	
}

int main()
{
	int a[10]={2,6,3,8,5,1,0,7,9,4};
	int len = sizeof(a)/sizeof(int);	//	计算数组元素个数 
	bubblesort(a,len);	//a为数组a[10]首地址,作为实参传递给形参 
	for(int i=0;i<len;i++)
	{
		cout<<a[i]<<" ";
	}
	return 0;
}

得到正序排列的值: 0 1 2 3 4 5 6 7 8 9。

 文章来源地址https://www.toymoban.com/news/detail-400036.html

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

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

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

相关文章

  • C++实现冒泡排序算法(含源码)

    C++实现冒泡排序算法(含源码) 冒泡排序是一种简单的排序算法,它通过不断交换相邻的元素,将较大的元素逐步\\\"浮\\\"到待排序列的尾部,从而实现排序。下面是C++的冒泡排序实现代码: 该函数接受一个整型数组和数组长度作为参数,在每次遍历中,它比较相邻的两个元素,将

    2024年02月07日
    浏览(41)
  • 稳定的排序算法:直接插入排序和冒泡排序 (c++实现)

    1.直接插入排序: 插入排序:就是把数组分为左右两个序列,保持左边序列中所有元素是有序的,(当左边序列只有第一个元素时,本身就是有序的,)每次往后移一个,将这个元素保存起来,跟左边的元素进行比较,直到找到第一个小于它的元素后停下,此时的位置是这个

    2024年02月10日
    浏览(43)
  • c++排序算法——冒泡排序(不会的一定要看,超级详细)

    今天,我们来学习一种排序算法—— 冒泡排序 。 首先,先问三个问题: 想象一下,如果字典不是按照字母顺序排列,查找一个单词,你得查到什么时候?这就是为什么人们引入了分类的概念,因为其 极大地帮助我们快速搜索物品 。 或者说,排序是一种常用的整理信息的方

    2024年02月16日
    浏览(44)
  • Cartographer算法2D激光雷达与IMU融合建图 首先先说一下我的硬件设备:

     上一篇文章讲了cartographer算法手持雷达建图的参数调试,这篇进一步讲如何融合2D雷达与IMU采用cartographer算法进行slam建图。 cartographer算法手持二维激光雷达建图(不使用里程计及IMU) https://blog.csdn.net/wangchuchua/article/details/127268037?spm=1001.2014.3001.5502 思岚s1激光雷达、Tobotics

    2023年04月10日
    浏览(51)
  • 【算法篇C++实现】常见排序算法

    算法精炼 每趟从待排序的记录中选出最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序处理流程 从待排序序列中,找到最小的元素; 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; 从余下的 N - 1 个元素中

    2024年02月13日
    浏览(43)
  • 数据结构——C语言实现常见排序(插入排序、希尔排序、选择排序、堆排序、冒泡排序)

    现在是北京时间2023年6月23日13点19分,度过了一个非常愉快的端午节。由于刚从学校回家,一下子伙食强度直升了个两三个档次。这也导致我的肠胃不堪重负,我也准备等会去健身房消耗一下盈余的热量。回到家陪伴爷爷走人生最后的阶段才是我这个暑假最重要的事情。自从

    2024年02月10日
    浏览(49)
  • 【数据结构常见七大排序(三)上】—交换排序篇【冒泡排序】And【快速排序】

    目录 前言 1.冒泡排序 1.1冒泡排序动图 1.2冒泡排序源代码 1.3冒泡排序的特性总结 2.快速排序👑 2.1hoare版本实现思想 排序前 排序中 排序后 2.2hoare版本快排源代码 2.3分析先走 情况1🥇 情况2🥈 交换类排序两个常见的排序算法【冒泡排序】、【快速排序】 交换排序基本思想:

    2024年02月16日
    浏览(67)
  • 【数据结构与算法】排序算法:冒泡排序,冒泡排序优化,选择排序、选择排序优化

    目录 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代码实现: 二、选择排序 1、选择排序思想 2、选择排序算法的性能分析  代码实现: 1、冒泡排序思想 冒泡排序的基本思想是通过相邻元素之间的比较和交换来逐步将最大(或最小)的元素移到右边(或左边

    2024年01月19日
    浏览(48)
  • 排序算法:冒泡排序

    冒泡排序是入门级的算法,但也有一些有趣的玩法。通常来说,冒泡排序有三种写法: 一边比较一边向后两两交换,将最大值 / 最小值冒泡到最后一位; 经过优化的写法:使用一个变量记录当前轮次的比较是否发生过交换,如果没有发生交换表示已经有序,不再继续排序;

    2024年02月11日
    浏览(45)
  • 排序:冒泡排序算法分析

    基于“交换”的排序︰ 根据序列中两个元素的比较结果来对换这两个记录在序列中的位置。 交换排序包括 冒泡排序 和 快速排序 。 1.算法原理 从后往前(或从前往后)两两比较相邻元素的值, 若为逆序(即 A [ i − 1 ] A [ i ] A[i-1]A[i] A [ i − 1 ] A [ i ] ) ,则交换它们,直到

    2024年02月07日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包