传统的冒泡排序法是这样操作:从前往后,依次比较两个相邻的元素,如果逆序则交换这两个元素值,然后继续往后操作;到了数据尾部时,就找出了一个最大值(或最小值)。然后重复上面的操作n-1次(n为元素个数)。

相关的改进办法:按照上面的办法来操作的话,第一次扫描把最大数(或最小数)放到最后面的位置,第二次扫描时其实只需要扫描到倒数第二个位置就可以了,因为最后一个位置已经不需要判断了,以后的操作都是类似的。这样可以减小程序运行时间。

双向走动法(以升序排序为例):首先,从前往后扫描,如果相邻两个元素前面的比后面的大,则交换,继续往后;到尾部以后,再往回走,如果后面的元素比前面的小,则交换,继续往前走;到了头以后,再往后走。为了减少走动次数,我们用变量start表示头,用变量end表示尾。每找到一个剩余数据中的最大数,就让变量end减1,每找到一个剩余数据中的最小数,就让变量start加1。循环条件为start<=end。

代码如下:

#i nclude #i nclude

void maopao(int source[],int n)

{

int start=0,end=n-1;

int i;

while(start<=end)/*如果还有元素没有确定其位置*/

{

for(i=start;iif(source[i]>source[i+1])

{

int t;

t=source[i];

source[i]=source[i+1];

source[i+1]=t;

}

end--;/*找到最大数*/

for(i=end;i>start;i--)/*寻找剩余元素的最小元素*/

if(source[i]{

int t;

t=source[i];

source[i]=source[i-1];

source[i-1]=t;

}

start++;/*找到一个最小数*/

}

}

void output(int data[],int n)

{

int i;

for(i=0;i{

if(i%10==0)

printf("\n");

printf("%4d",data[i]);

}

}

int check(int data[],int n)

{/*检查结果数据是否已升序排列*/

int i;

for(i=0;iif(data[i]>data[i+1])

return 0;

return 1;

}

void main()

{

int data[500];

int i;

srand(time(NULL));

for(i=0;i<500;i++)

data[i]=random(500);

printf("\nThe original data is:\n");

output(data,500);

maopao(data,500);

printf("\nAfter sort:\n");

output(data,500);

printf("\n");

if(check(data,500)==1)

printf("\nRight.");

else

printf("\nWrong.");

}

linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...相关推荐

  1. linux用冒泡排序程序,冒泡排序 Linux下c 实现

    最近有个想法:工作之余,在linux下,用c/c++把常用的算法重写一遍.当然,对算法的认识,我仅限于皮毛,我不可能超越那些前辈先知,但我仍想,用自己的方式演示一遍,只当自娱自乐吧!秉承一贯的原则,不 ...

  2. c语言利用查表法画正弦波,嵌入式C语言查表法在项目中的应用

    就像下面的这个表 之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑马灯的话,思考一个这样的算法是不可取的,很费时间,也很费脑力,于 ...

  3. 用matlab实现冒泡排序法,「冒泡排序算法」MATLAB实现冒泡排序算法 - seo实验室

    冒泡排序算法 本文转载自头条文章原文章地址 1.bubble_sort.m function y=bubble_sort(x) x_len=length(x); for i=1:x_len-1 for ...

  4. python实现双向最大匹配法

    python实现双向最大匹配法 CSDN小马哥 于 2019-01-08 21:01:29 发布 2776  收藏 3 文章标签: python 中文分词技术 双向最大匹配法 自然语言处理 版权 -- ...

  5. ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数、运输次数、三种不同的车型,预测需要花费的小时数)来预测一个自变量

    ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数.运输次数.三种不同的车型,预测需要花费的小时数)来预测一个自变量 输出结果 代码设计 from nu ...

  6. EL之Boosting之GB(DTR):利用梯度提升法解决回归(对多变量的数据集+实数值评分预测)问题

    EL之Boosting之GB(DTR):利用梯度提升法解决回归(对多变量的数据集+实数值评分预测)问题 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 xList = [] labe ...

  7. C语言十个字母用冒泡法排序,冒泡排序法(C语言) - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...

    常用的排序方法有冒泡排序法,选择排序法,插入排序法以及希尔排序法等.本文着重讲解如何利用C代码,实现冒泡排序. 首先,要了解什么是冒泡排序.冒泡排序是常用的一种排序方法,其基本方法就是逐次比较.即一次 ...

  8. java实现rsa欧几里得算法求d_RSA算法中利用欧几里得算法求d详细过程

    文章转自新浪博客@任家 正文: RSA是第一个也是使用的最广泛的公钥加密算法,在1978年由R.Rivest.AdiShamir和Adleman三人发明, 并以他们的名字命名.RSA算法的安全性基于大 ...

  9. 利用双向注意流进行机器理解

    利用双向注意流进行机器理解 本文基于Bi-Directional Attention Flow For Machine Comprehension一文 1. 概述 Machine Comprehens ...

最新文章

  1. [笔记]C#基础入门(五)——算法:交换
  2. Machine Learning week 1 quiz: Linear Algebra
  3. vb.net2019-播放声音(wav、mp3等)
  4. migo获取header sap_Adjust Stock(MI06, MI07, MIGO)
  5. Android之添加固定图标到桌面
  6. 又一门国产数据库语言诞生了,比SQL还好用
  7. VMware vSphere Client下增加虚拟机磁盘空间的方法
  8. Excel VBA获取当文件下级子目录或目录中文件
  9. 怎么用python自动梳理表格_Python将多份excel表格整理成一份表格
  10. ​ [RHEL7.1]重新封装系统(制作模板)
  11. php sub pos,PHP pos()用法及代码示例
  12. Android7.1 Offload模式下的音频数据播放流程
  13. caffe教程笔记《Solver》
  14. 销毁Session和清空指定的属性
  15. FPGA入门——初学建议
  16. 中兴B860AV2.1U,联通版本,强刷固件线刷包
  17. 沁恒MCU串口使用指南
  18. SSH连接服务器断开
  19. 【转载】Windows 7下使用bcdedit删除多余启动项的命令
  20. Java 使用 JDBI 库访问MySQL 数据库

热门文章

  1. element ui 获取文件的路径_win10使用WinAppDriver实现UI自动化
  2. android资源包混淆,Android---andresguard资源混淆
  3. 为什么不敢和别人竞争_看懂这个自我评价发展曲线,你就明白,为什么青春期孩子如此叛逆...
  4. window.open 实现session隔离_InnoDB存储引擎MVCC实现原理
  5. tomcat c3p0 mysql_C3P0数据库连接池与tomcat一起使用时报错
  6. 不规则图形数格子的方法_小学数学,怎么数平面图形中长方形与正方形个数
  7. 【mysq 5.7.31】远程访问权限(允许远程连接)
  8. selenium:反反爬拖动验证码
  9. 【H2 Database】导出CSV
  10. idea编译的文件怎么用cmd打开_JAVA学习册|基础语法|cmd输出HelloWorld