基本思想:

最简单的排序,也是最耗时间的排序

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

冒泡排序的示例:

算法的实现:

void bubbleSort(int a[], int n){for(int i =0 ; i< n-1; ++i) {for(int j = 0; j < n-i-1; ++j) {if(a[j] > a[j+1]){int tmp = a[j] ; a[j] = a[j+1] ;  a[j+1] = tmp;}}}
}

冒泡排序算法的改进

对冒泡排序常见的改进方法是加入一标志性变量exchange,用于标志某一趟排序过程中是否有数据交换,如果进行某一趟排序时并没有进行数据交换,则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程。本文再提供以下两种改进算法:

1.设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置。由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可。

改进后算法如下:

void Bubble_1 ( int r[], int n) {int i= n -1;  //初始时,最后位置保持不变while ( i> 0) { int pos= 0; //每趟开始时,无记录交换for (int j= 0; j< i; j++)if (r[j]> r[j+1]) {pos= j; //记录交换的位置 int tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;} i= pos; //为下一趟排序作准备}
}

2.传统冒泡排序中每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。

改进后的算法实现为:

void Bubble_2 ( int r[], int n){int low = 0; int high= n -1; //设置变量的初始值int tmp,j;while (low < high) {for (j= low; j< high; ++j) //正向冒泡,找到最大者if (r[j]> r[j+1]) {tmp = r[j]; r[j]=r[j+1];r[j+1]=tmp;} --high;                  //修改high值, 前移一位for ( j=high; j>low; --j) //反向冒泡,找到最小者if (r[j]<r[j-1]) {tmp = r[j]; r[j]=r[j-1];r[j-1]=tmp;}++low;                   //修改low值,后移一位}
} 

转载于:https://www.cnblogs.com/jin-nuo/p/5293458.html

交换排序—冒泡排序(Bubble Sort)相关推荐

  1. php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法.分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换 ...

  2. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  3. 经典排序算法 - 冒泡排序Bubble sort

    经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...

  4. 7.使用php描述冒泡排序,PHP 数据结构 算法描述 冒泡排序 bubble sort

    PHP 数据结构 算法描述 冒泡排序 bubble sort 复制代码 代码如下: /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面.每次循 ...

  5. 排序算法——冒泡排序(Bubble Sort)

    排序算法--冒泡排序(Bubble Sort) 算法简介(Introduction) Bubble sort is to compare adjacent elements of the list a ...

  6. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2 ...

  7. 冒泡排序(Bubble Sort)的学习

    基本概念 (一)常见排序算法可以分为两大类: 1.比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 2.非比较类排序:不通过比较来 ...

  8. 数据结构排序算法——交换排序(冒泡排序Bubble Sort)

    一.算法简介: 每一趟只能确定将一个数归位.即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去.如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n- ...

  9. 基础排序算法 – 冒泡排序Bubble sort

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束. 从小到大排序: 原 ...

  10. Java冒泡排序(Bubble Sort)算法实例

    何为冒泡排序? 冒泡:就像气泡从水中冒出来一样 在冒泡排序中,最小数或最大数取决于您是按升序还是降序对数组进行排序,向上冒泡到数组的开头或结尾. 算法描述: 比较相邻的元素.如果第一个比第二个大,就交 ...

最新文章

  1. C#中Hashtable表的应用
  2. MobileViT 网络测试
  3. 20172304 《程序设计与数据结构》第四周学习总结
  4. python学习的一个定位_python学习之——selenium元素定位
  5. altera fpga sdi输出方案_FPGA在电力电子中的应用有哪些?
  6. mouseup 左键_javascript中mouseup事件丢失的原因与解决办法
  7. [HEOI2016/TJOI2016]序列
  8. Java 在线反编译反编译工具
  9. LaTeX中实心圆点列表的一点经验
  10. 毛笔字软件测试简历,写字测试
  11. access有效性规则不为空值_access窗体文本框有效性规则中输入is not null无效
  12. 基于SDL的魂斗罗小游戏(源码+解析)
  13. 下班后两小时,决定你将会成为怎样的人
  14. js逆向 空气质量检测平台
  15. 无线射频专题《射频合规,无线电认证系列简介,IC/CE/FCC/NCC/KCC/SRRC/ROHS/TELET/REACH/ANATEL》
  16. Trinity进行转录组组装(2))
  17. [CATransaction flush] 作用详解
  18. 加载dll出错的解决方法
  19. linux_防火墙的安装
  20. 微信小程序家庭记账本开发进度七

热门文章

  1. javascript动态字母
  2. mqtt客户端工具_如何在 Rust 中使用 MQTT
  3. 人工神经网络理论、设计及应用_红层软岩大直径素混凝土置换桩复合地基设计理论及应用研究——以成都 ICON云端项目为例...
  4. 受检异常 非受检异常_C++异常实战之十一 使用scope_fail处理复杂场景(非fail-fast)下的异常...
  5. Android NDK开发之 arm_neon.h文件ABI说明
  6. Windows10下VB6.0开发——常见控件使用整理
  7. js webpack 配置路径_vue使用webpack配置路径别名
  8. Cmake构建_设置debug与release输出路径
  9. 特征检测和特征匹配方法汇总
  10. springboot的三种启动方式