广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++冒泡排序与选择排序详解
  • 473
分享到

C++冒泡排序与选择排序详解

2024-04-02 19:04:59 473人浏览 八月长安
摘要

目录 一.冒泡排序1.概念 2.图解3.代码的思路4.代码例子 二.选择排序1.概念2.图解3.代码的思路总结 一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字

 一.冒泡排序

1.概念

冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思义就是数字不断比较然后最大的突出来,也就是说把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换。

 2.图解

关于冒泡排序我自己画了一幅图来描述他的一轮过程

这里我举了五个无序的数{7,3,6,5,4}

 由此可看出他不断与右侧相邻的数字进行比较,当他大于右边的数字就交换,否则不交换,就用这种方法不断进行排序进行很多轮,最后得出一个有序的序列{2,4,5,6,7}。

3.代码的思路

冒泡循环是一种有序的序列,有上图我们不难看出冒泡循环一轮需要进n-1次比较然后开启下一层,而且你一轮比较完了之后最后一个最大的数就不用再参与比较循环了,所以下一次的循环可以减少一次。

因此我的思路是利用两次for循环,一次循环来当取第二次循环的次数,然后依次减少第二次for循环的次数,简便了很多过程,然后数组两个相邻的数字进行依次比较,大于右边的也就是大于下一位的交换位置,否则不交换,所以我的两个for循环的代码如下(其实这也算是个万能代码,就冒泡循环这一块)当然i,k,b都需要来定义的,n为比较序列中元素个数。

这个代码也用了两次for循环所以我们不难推算出时间复杂度为o(n^2)


for(i=0;i<n-1;i++)
{ 
 for(k=0;k<n-1-i;k++)
   { if(a[k]>a[k+1])
     { b=a[k];
       a[k]=a[k+1];
       a[k+1]=b; 
      }//交换a[k]与a[k+1]位置            
     }
 }

4.代码例子

我自己也写了一个代码,输入a[10]序列的数字,然后冒泡循环进行排序来实现


#include<stdio.h>
int main()
{
	int a[10], i, j, b, k;
	for (i = 0; i < 10;i++)
	{
		printf("输入第%d个数为:", i+1);
		scanf_s("%d", &a[i]);
   }
	for (k = 0; k < 9; k++)//外部循环
	   		for (i = 0; i < 9 - k; i++)//内部循环
			if(a[i] > a[i + 1])//
			{
				b = a[i];
				a[i]= a[i + 1];
				a[i + 1] = b;
			}
		
	printf("排出序列为:");
	for(i = 0; i < 10; i++)
		printf("%d ", a[i]);
	return 0;
}

最后运行也是成功的

 二.选择排序

1.概念

选择循环的主要是选择,选择一个元素去进行比较,假如这个数比他小,换成嘞个数继续比较,最后找出最小值与数组第一位的数进行交换。然后一直这样循环下去,直到代码排序完成。也就是通过一个中间量从带排序的的数中找出最大或最小的交换到对应位置。

2.图解

关于选择排序我自己花了一幅图来描述他的一轮比较

我用了五个无序数来做例子{2,1,4,-3,3}

 由此可以看出选择比较的过程,这里我用指针代指了需要的中间量,刚开始指针指向2,然后2去比较,1<2,所以指针指向较小值,指针指向1,最后就这样找出-3为最小值和第一个交换,得到第一轮循环比较的数列{-3,1,4,2,3}。

3.代码的思路

其实观察上图一轮循环次数还有循环完一轮之后,不需要用最小值比较可以看出其实他和冒泡循环有点相似,都是循环一轮需要进n-1次比较然后开启下一层,而且下一次循环可以减少一次。

所以我的思路是,依然运用两次for循环,与冒泡循环不同的是我需要一个中间商,所以我可以引用一个局部变量来帮助我,这个局部变量就是图解的指针,局部变量就是数组对应元素的位置,不断进行比较,当他小于一个数时,他就等于嘞个数的位置数,继续比较,直到循环结束找出最小值,最小值跟第一位换位置,一次循环直到排出有序序列为止。所以代码如下


for(i=o;i<n-1:i++)//循环数列取得数开始依次比较
{ 
  int x=i;//x为中间商
  for(k=i+1;k<n;k++)//从循环数列取得数后一位开始循环数列取得数进行依次比较
    {
      if(a[x]>a[k])//得出最小值
        k=x;
        if(x!=i)//将得到的最小值跟最前面的数字进行交换
        { t=a[i];
          a[i]=a[x];
          a[x]=t;
        }
     }
 }

这也是一个万能代码可以用在选择序列上。

总结

到此这篇关于c++冒泡排序与选择排序详解的文章就介绍到这了,更多相关C++冒泡排序 选择排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++冒泡排序与选择排序详解

本文链接: https://www.lsjlt.com/news/160722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++冒泡排序与选择排序详解
    目录 一.冒泡排序1.概念 2.图解3.代码的思路4.代码例子 二.选择排序1.概念2.图解3.代码的思路总结 一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字...
    99+
    2022-11-12
  • 详解Java之冒泡排序与选择排序
    目录一.冒泡排序1.概念2.图解3.代码的思路4.代码例子二.选择排序1.概念2.图解3.代码的思路总结一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思...
    99+
    2022-11-12
  • java冒泡排序和选择排序详解
    目录1、冒泡排序2、选择排序法总结1、冒泡排序 冒泡排序(Bubble Sorting)的基本思想是:通过对待 排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发...
    99+
    2022-11-12
  • 怎么理解JavaScript冒泡排序与选择排序
    本篇内容主要讲解“怎么理解JavaScript冒泡排序与选择排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解JavaScript冒泡排序与选择排序”吧...
    99+
    2022-10-19
  • C#算法之冒泡排序、插入排序、选择排序
    冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序。 以从小到大排序为例。 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 1...
    99+
    2022-11-12
  • Java如何实现冒泡排序与选择排序
    小编给大家分享一下Java如何实现冒泡排序与选择排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.冒泡排序1.概念冒泡排序这种排序方法其实关键词就在于冒泡两个...
    99+
    2023-06-22
  • JavaScript中如何实现冒泡排序与选择排序
    JavaScript中如何实现冒泡排序与选择排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、冒泡排序算法冒泡算法顾名思义,可以将待排...
    99+
    2022-10-19
  • C#算法中如何实现冒泡排序、插入排序、选择排序
    这篇文章主要介绍了C#算法中如何实现冒泡排序、插入排序、选择排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。冒泡排序法是数组等线性排列的数字从大到小或从小到大排序。以从小到...
    99+
    2023-06-26
  • c语言冒泡排序和选择排序的使用代码
    目录1.冒泡排序2.选择排序区别总结1.冒泡排序 冒泡排序将一个列表中的两个元素进行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,该过程将被重复执行...
    99+
    2022-11-13
  • JAVA小练习冒泡排序,选择排序和插入排序
    冒泡:点击(此处)折叠或打开...
    99+
    2023-06-02
  • 冒泡排序详细详解
    因为在面试时  经常手写冒泡排序   可是冒泡排序看起来容易  理解起来也是有点问题   所以今天把冒泡排序的知识点详细的从头整理一下 如果下面的文字不理解   可以参考B站【Java基础入门 冒泡排序】https://www.bilibi...
    99+
    2023-10-27
    算法
  • JavaScript中怎么实现冒泡排序和选择排序
    本篇文章为大家展示了JavaScript中怎么实现冒泡排序和选择排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。算法说明算法(Algorithm)是解决问题的一种...
    99+
    2022-10-19
  • java选择排序和冒泡排序有什么区别
    Java中的选择排序和冒泡排序是两种不同的排序算法,它们的区别主要体现在排序的方式和效率上。 排序方式: 选择排序:每次从未排...
    99+
    2023-10-26
    java
  • java中怎么实现冒泡排序和选择排序
    这篇文章将为大家详细讲解有关java中怎么实现冒泡排序和选择排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、冒泡排序冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序...
    99+
    2023-06-20
  • C语言详解冒泡排序实现
    目录前言一、冒泡排序是什么二、具体步骤1.代码解释2.读入数据总结前言 在排序中,有各种各样的排序方式,今天我们将要来介绍《冒泡排序》。今天会从冒泡排序的具体意义和他的操作来展开。 ...
    99+
    2022-11-13
  • Java 与排序算法(1):冒泡排序
    一、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻两个元素的位置,使得较大的元素逐渐往后移动,直到最后一个元素为止。冒泡排序的时间复杂度为 ...
    99+
    2023-09-02
    排序算法 java 算法 冒泡排序
  • 手把手教你搞懂冒泡排序和选择排序
    目录冒泡排序原理:选择排序原理:总结冒泡排序 原理: 从头(左边)开始比较每一对相邻的元素,如果第1个比第2个大,就交换它们的位置,执行完一轮后,最末尾(最右边)就是最大的元素。 举...
    99+
    2022-11-12
  • C#委托与冒泡排序实例
    C#实现委托 namespace Delegate { delegate void DGSayiHi(string name);//声明委托 delegate voi...
    99+
    2022-11-13
  • 排序算法(冒泡、选择)-python代码
    冒泡排序: def bubble_sort(list): for i in range(len(list) - 1): # 这个循环负责设置冒泡排序进行的次数 for j in range(len(list) ...
    99+
    2023-01-31
    算法 代码 python
  • C语言中冒泡排序算法详解
    目录一、算法描述二、算法分析三、完整代码总结一、算法描述 比较相邻两个元素,如果第一个比第二个大则交换两个值。遍历所有的元素,每一次都会将未排序序列中最大的元素放在后面。假设数组有 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作