直接上代码:

#include <iostream>
using namespace std; void BubbleSort(int arr[],int n){ while(n-->) //在本例中,第1次执行while时,n的值为9,即(n-1)
for(int i=;i<n;i++){
//如果当前元素比后面相邻的元素大,则交换相邻元素数值
if(arr[i]>arr[i+])
swap(arr[i],arr[i+]); }
} int main(){ int a[]={,,,,,,,,,};
BubbleSort(a,);
for(int i=;i<;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return ;
}

考虑一下,如果冒泡法在执行期间,执行到某个元素(不是最后一个元素),此时如果序列已经有序,那么算法会停下来吗?答案当然是否定的,只有遍历完整个待排序序列算法才会停下来。那么后面剩余元素的遍历就成了徒劳的浪费时间,因此,我们可以为我们的算法立个flag来标记一下,以确定它不会执行多余操作。

那么冒泡排序算法结束的条件就是:在一趟排序过程中没有发生元素的交换。

所以我们可以对关键代码做以下优化


void BubbleSort(int arr[],int n){

    int flag;    //标记
while((n--)>){
flag=; //标记初始值为0
for(int i=;i<n;i++){
if(arr[i]>arr[i+]){
swap(arr[i],arr[i+]);
flag=; //如果发生交换,标记就重置为1
}
}
if(flag==) //如果标记还是初始值,那么证明这一趟没有发生数值交换,即完成排序
return;
}
}

对于冒泡排序,一趟排序后能确保一个关键字到达其最终位置。

冒泡排序算法的C++实现的更多相关文章

  1. C#冒泡排序算法

    用了两种形式的数据,一个是泛型List,一个是数据int[].记录一下,作为自己学习过程中的笔记. using System; using System.Collections.Generic; us ...

  2. c#-冒泡排序-算法

    冒泡排序(Bubble Sort) 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后 ...

  3. java冒泡排序算法

    /** * 冒泡排序算法:每次 * @author shaobn * @description 每次都会确定一个最大的值 即固定了,所以会每次-i; */ public class Test1 { p ...

  4. 快速、冒泡排序算法(PHP版)

    1.冒泡排序算法改进: 方法一: function bubbleSort($arr){//$arr(1...n)是待排序的文件,采用自下向上扫描,对$arr做冒泡排序 $bFlag = true; / ...

  5. 冒泡排序算法(C#实现)

    简单的冒泡排序算法,代码如下: ] = temp; hasExchangeAction =true; //发生过互换 } } if (!hasExchangeAction) //如果没有发生过互换,则 ...

  6. 数据结构之------C++指针冒泡排序算法

    C++通过指针实现一位数组的冒泡排序算法. 冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 代码: /* Name:冒泡排序算法 Copyright:Null ...

  7. PHP实现冒泡排序、双向冒泡排序算法

    冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...

  8. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  9. 【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  10. php中的冒泡排序算法

    <?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array( ...

随机推荐

  1. Vue的基本使用

    VUE vue挂载点 el:"标签id" vue绑定属性 :v-model:"属性值" vue绑定事件 @click:"事件名" vue基本 ...

  2. 一篇文章读懂HTTPS及其背后的加密原理

    HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其原理. 1 ...

  3. 'QueryDict' object is not callable 错误解析

    我把request内置库和 requests库  给搞混了 requests使用来发送请求的, request 而是用来获取数据的 别看只有一个单词只差,却让我找了大半天 requests.post( ...

  4. 【shiro】(4)---Shiro认证、授权案例讲解

    Shiro认证.授权案例讲解 一.认证  1. 认证流程     2.用户密码已经加密.加盐的用户认证 (1)测试类 // 用户登陆和退出,这里我自定了一个realm(开发肯定需要自定义realm获取 ...

  5. mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间

    1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期select DATE_SUB(curdate(),INTERVAL -1 DAY) ...

  6. 网络爬虫之html2md

    前言 上周利用java爬取的网络文章,一直未能利用java实现html转化md,整整一周时间才得以解决. 虽然本人的博客文章数量不多,但是绝不齿于手动转换,毕竟手动转换浪费时间,把那些时间用来做些别的 ...

  7. 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13

    01 中间语言(IL) .Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性.要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中 ...

  8. 使用meterpreter让没有安装python解释器的肉鸡设备执行任意python程序

    目标设备不需安装python解释器就能让其执行python程序 # 需要在与目标meterpreter的session中加载python模块 meterpreter > load python ...

  9. 我的python渗透测试工具之主机嗅探

    嗅探工具的主要目标是基于UDP发现目标网络中的存活主机,选择UDP的原因是UDP访问过程开销小. 由于很多的操作系统在处理UDP端口的闭合时都会存在一个共性,我们也正是利用这个共性来开展确定此IP上是 ...

  10. Entity Framework Core 中文入门文档

    点击链接查看文档: Entity Framework Core 中文入门文档