• 问题描述

    编写双向冒泡排序算法,在正反两个方向交替进行扫描,即第一趟把关键字最大的元素放在最后面,第二趟把关键字最小的元素放在序列最前面,如此反复下去。

  • 算法思想

在原有的冒泡排序的基础上进行改造

改造处:① 外部循环条件,因为待排序序列经过一轮排序后,下一次排序的起始点与结束点都会发生变化,因此不直接填入递增或递减语句
for(i=0,j=L.length-1;i<j;)
② 内部循环条件
for(k=i+1;k<=j;k++) //最大元素推至最后(j指向的位置为终点位置)
for(l=j-1;l>=i;--l)//最小元素推至最前

  • 完整测试代码
#include<stdio.h>
int main(){int a[7]={111,112,6,15,3,118,6};int i,j,k,l,temp; for(i=0,j=6;i<j;){int flag=0;//判断是否有逆序情况for(k=i+1;k<=j;k++){if(a[k]<a[k-1]){flag=1;temp=a[k];a[k]=a[k-1];a[k-1]=temp;}   }if(!flag) break;//已是有序序列退出循环j--;for(l=j-1;l>=i;--l){if(a[l]>a[l+1]){flag=1;temp=a[l];a[l]=a[l+1];a[l+1]=temp;}  }if(!flag) break;i++;//因为从后往前会有一个最小的元素排好序所以下标要修改}for(i=0;i<7;i++) printf(" %d ",a[i]);
}

冒泡排序——两头交替排序相关推荐

  1. 排序算法分析:冒泡排序、选择排序、插入排序、希尔排序、快速排序

    文章目录 一.冒泡排序 二.选择排序 三.插入排序 四.希尔排序 五.快速排序 一.冒泡排序 冒泡排序(Bubble Sort),它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大 ...

  2. 基础排序算法(冒泡排序,选择排序,插入排序)

    最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...

  3. 经常使用排序算法实现[交换排序之冒泡排序、高速排序]

    相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会按照相等的关键(换言之就是值)维持纪录的相对次序. 假设排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出如今S之前,在排 ...

  4. 冒泡排序和鸡尾酒排序(改进的冒泡排序)

    冒泡排序 冒泡排序是最基本的排序算法,也是排序算法中的经典的算法,也是比较简单.容易理解的算法,而且还可以对其排序过程进行优化. 冒泡排序排序过程总是大数往前放,小数往后放,相当于气泡往上升,所以称作 ...

  5. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)

    冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...

  6. JavaSE(二十四)——冒泡排序、选择排序、直接插入排序以及二分查找

    文章目录 1. 冒泡排序 2. 选择排序 3. 直接插入排序 4. 二分查找 1. 冒泡排序 原理:数组元素两两比较,大的往后放,经过一轮比较后,最大元素在最后面,如此往复. 举例说明: 代码: // ...

  7. 排序算法——冒泡排序、选择排序、直接插入排序

    1.冒泡排序 一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换--将最大的元素交换到整个数据的最后. 排序的趟数 = 数据元素的个数 = len - 1 #includ ...

  8. 冒泡排序、选择排序和插入

    冒泡排序.选择排序和插入排序代码如下: package cn.luxh.app.test;public class SimpleSortUtil {/*** 冒泡排序* 从小到大排序* 思路:* 1) ...

  9. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

    参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...

最新文章

  1. SQL 解决从分组数据中总是挑选第一条数据的问题
  2. Java Web——图像上传
  3. 自己动手利用KVM和Intel VT实现简单虚拟机
  4. 基于CC1310的915MHz硬件设计
  5. 线性表—顺序表-顺序表基本运算的实现
  6. 一些设计上的基本常识
  7. [转帖]Cookies和Session的区别和理解
  8. 《数学之美》—简单之美-布尔代数和搜索引擎
  9. aodv协议c语言实现,TinyOS在CC2530下的移植及AODV路由协议的实现
  10. webstorm配置vue模板 webstorm快速生成vue模板
  11. Selina 爱我的每个人
  12. OpenWrt U盘分区启动设置
  13. 工作量单位-人月、人日、人时 详解
  14. linux 不小心删除ls,浅谈Linux系统误删除文件恢复方法
  15. Jmeter应用-接口测试
  16. 领英辅助工具领英精灵自动加好友功能讲解
  17. Android baidu地图定位实现签到打卡功能(附源码)
  18. k8s资源之pvpvcsc
  19. 一篇文章让你了解互联网公司的职位架构以及职能
  20. java关于“随机点名器“的案例

热门文章

  1. 郑州大学计算机学科导论,郑州大学远程教育2017年网上学习导论考试参考答案(2017年第171期)...
  2. 顶象入选“工控安全推进分会” 助力贯标试点示范
  3. 关于主流直播平台(虎牙,斗鱼)用到的一些技术
  4. Android热修复及插件化原理
  5. 向日葵Linux传文件,干货整理:向日葵如何实现远程文件传输?
  6. Lin-CMS(内容管理系统框架)
  7. 阿拉德之怒正版服务器,正版游戏的胜利!阿拉德之怒彻底凉凉,DNF手游这波上线稳了...
  8. axios 请求取消及重发
  9. 汇咖科技:风口当下,与我们相关的,三大小程序创业红利项目!
  10. 人脸识别眨眼张嘴软件_纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js