kingfeng1983
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看kingfeng1983的 主题 / 回贴
楼主  发表于: 2009-04-01 17:35
各位高手知道的请帮助讲解一下,冒泡法?
最好用例子说明!
本人非常感激那些热心助人的好人!
shuaigeshi
蛰伏......
级别: 略有小成
精华主题: 0
发帖数量: 101 个
工控威望: 220 点
下载积分: 700 分
在线时间: 36(小时)
注册时间: 2009-02-14
最后登录: 2021-08-10
查看shuaigeshi的 主题 / 回贴
1楼  发表于: 2009-04-01 20:04
冒泡法?记得学C语言的时候见到过 是用于对一组数据选择性的排序   你要问的是这个么
zxc6688
工业自动化是我们的目标
级别: 略有小成
精华主题: 1 篇
发帖数量: 385 个
工控威望: 338 点
下载积分: 3994 分
在线时间: 174(小时)
注册时间: 2007-09-11
最后登录: 2024-01-05
查看zxc6688的 主题 / 回贴
2楼  发表于: 2009-04-01 20:14
这是在GOOGLE上搜到的

Bubble Sort(冒泡法)

最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。

(冒泡法排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,......,第n-j个与第n+1-j个比较,共比较n-1次。此时第n+1-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。例如:第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较......。直到完成第n-1个数与第n个数的比较。此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,......直到完成第n-2个数与第n-1个数的比较;......第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。
共n-1轮排序处理,第j轮进行n-j次比较和至多n-j次交换。
从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。)



Bubble Sort程序:


STL C++程序:(VC++6.0通过)
#include "stdafx.h"
#include "iostream.h"

template<class T>
class doit{
private:
int x,y;
T temp;
public:
doit(T* in,int count)
{
for(y=0;y<count-1;y++)
{
for(x=1;x<count-y;x++)
{
if((*(in+x))>(*(in+x-1)))
{
temp=(*(in+x-1));
(*(in+x-1))=(*(in+x));
(*(in+x))=temp;
}
}
}
}
};

int main()
{
double a[4]={1.1,1.3,1.9,2.2};
doit<double> d(a,4);
for(int i=0;i<4;i++)
{
cout<<a<<endl;
}
return 0;
}

C语言程序:(TC 2.0通过)
void doit(float* in,int count)
{
int x;
int y;
float temp;
for(y=0;y<count-1;y++)
{
for(x=1;x<count-y;x++)
{
if((*(in+x))>(*(in+x-1)))
{
temp=(*(in+x-1));
(*(in+x-1))=(*(in+x));
(*(in+x))=temp;
}
}
}
}
http://zxc6688.ys168.com/
xyd_hsn10
jakenghuang
级别: 网络英雄
精华主题: 0
发帖数量: 384 个
工控威望: 5350 点
下载积分: 61683 分
在线时间: 448(小时)
注册时间: 2008-12-29
最后登录: 2021-03-08
查看xyd_hsn10的 主题 / 回贴
3楼  发表于: 2009-04-12 15:35
高手高手,服服
xiugu
级别: 略有小成
精华主题: 0
发帖数量: 129 个
工控威望: 234 点
下载积分: 769 分
在线时间: 18(小时)
注册时间: 2007-01-10
最后登录: 2021-08-09
查看xiugu的 主题 / 回贴
4楼  发表于: 2009-04-13 13:16
在PLC上,用循环,字位移,比较或者循环,变址寄存器,比较也能实现。
zxh.caocao
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zxh.caocao的 主题 / 回贴
5楼  发表于: 2009-04-13 16:08
没听说过,谢谢问题
neaici
级别: 略有小成
精华主题: 0
发帖数量: 66 个
工控威望: 208 点
下载积分: 531 分
在线时间: 34(小时)
注册时间: 2008-11-21
最后登录: 2018-01-26
查看neaici的 主题 / 回贴
6楼  发表于: 2011-03-17 14:35
蛮好的啊 谢谢
1991234999
zdlsnail
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看zdlsnail的 主题 / 回贴
7楼  发表于: 2011-03-17 14:49
学习下
云子贤
给自己一些时间,或许可以......
级别: 略有小成
精华主题: 0
发帖数量: 276 个
工控威望: 432 点
下载积分: 1175 分
在线时间: 113(小时)
注册时间: 2010-06-13
最后登录: 2016-01-14
查看云子贤的 主题 / 回贴
8楼  发表于: 2011-03-17 18:06
   学习了.......
多看手册少泡妞,哈.....
weichangye
级别: 略有小成
精华主题: 0
发帖数量: 226 个
工控威望: 365 点
下载积分: 3006 分
在线时间: 314(小时)
注册时间: 2011-01-18
最后登录: 2024-04-18
查看weichangye的 主题 / 回贴
9楼  发表于: 2011-03-17 20:36
长见识,原来是这样