dim
A(10)
as
integer
dim
I,J
as
integer
dim
temp
as
integer
'临时交换用
'初始化随机函数
randmize
'取10个随机数(范围100以内)并存放到数组中
for
I=0
to
9
A(I)=Int(Rnd100)
next
I
'开始冒泡排序
for
I=0
to
8
for
J=I+1
to
9
'冒泡原理(大的数下沉,小的数上浮)即(如果前面的大于后面的数,两者交换)
if
A(I)>A(J)
then
temp=A(I):A(I)=A(J):A(J)=temp
next
J
next
I
冒泡法对10个数由小到大排序:
a=rand(1,10);%随机生成一组数
a%未排序前原始数据
n=10;%数组长度
forj=1:n-1
fori=1:n-1
ifa(i)>a(i+1)
c=a(i);
a(i)=a(i+1);
a(i+1)=c;
end
end
end
a%排序后数组显示
资料拓展
冒泡法排序原理:例如有一组数为12,23,1,4,2,6。使用冒泡排序方法使这组数从小到大排列。首先12和23比较,12<23,则位置不变;接着23和1比较,因为23>1,所以交换23和1的位置,这组数这时是12
123426;
然后比较23和4,因为23>4,所以交换23和4,这组数变为1214232
6;然后比较23和2,23>2,再交换,变为12142236;然后比较23和6,23>6,再交换,最后为121426
23。
这就叫经过了一趟排序,即相邻两数比较,大的放在后面,经过一趟排序后,最大的数就冒泡到最后面了。然后再对前n-1个数进行第二趟排序,排序后第二大的数就放在了第n-1个位置;最后经过n-1趟排序后整个数组就有序了。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。
参考资料来自于:MATLAB-百度百科
楼上写的代码没错。但是你写这个,和楼主在书上看到的东西没区别哈。
我帮你解释一下
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
这段代码是教材上的一段,首先我们分析代码,这里代码中定义的是一个占10个空间的数组a[],进行第一次外层循环,首先a[0]进行比较,和a[1]进行比较,如果a[0]>a[1]则改变a[0]的位置a[1],之后a[1]就比a[0]大,然后a[1]和a[2]进行比较,使a[2]大于a[1],……到a[8]和a[9]进行比较后a[9]大于a[8],从而说明a[9]此时的值在该10个数中最大;此后进行外层的第二次循环又从a[0]开始,一直到a[7]和a[8]进行比较,使a[8]在除去a[9]中的数中是第一大的数,是10个数中是第二大的数(只比a[9]小),从而把数组中的第二大的数确定出来;……;逐次循环就把第一(给你描述了的),第二(给你描述了的),第三大的数(自己按我的思路自己思考)……这就是冒泡法的思路了。
综上所述,总结下来,就是先确定第一大数,在确定第二大数,然后以此类推。
你在理解的时候因该是for(i=0;i<9-j;i++)中的i<9-j难理解,你想啊第一大数确定了后,第二大的数就不需要和第一大数比较了啊(在第一次循环中就确定a[9]是最大的数,a[8]肯定小于a[9]),就是这种思想,j是用来看此时是在比较第j+1大的数的。
到此,应该给你讲述清楚了吧。如果还有什么问题——乐意为你解答——力所能及之处。呵呵
反过来写那内存循环就不起做用了,J再变化最内层相比的还是同一个数最后总体上只是相当于做了一次冒泡而不是冒N次泡
最好的写法:
for(j=0;j<N-1; j++) //N-1 不多做循环
for(i=0;i<N-1-j; i++) // N-1-j 不是 N-j 否则初次循环时越界比较了一个数,是个错误
if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
可以稍傻冒的写法:(也能排出结果)
for(j=0;j<N; j++) //j<N 最后一次循环没有作用, 不过内层循环数为0,不影响效率
for(i=0;i<N-1-j; i++) //N-1-j
if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
最傻冒的写法(也能排出结果)
for(j=0;j<N-1; j++)
for(i=0;i<N-1; i++) //多做了很多比较,有序的部分也一直参与比较,只是不会有交换
if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}
程序如下:
#include <stdioh>
int main ()
{
int a[10];
int i, j, t;
printf ("请输入十个数:\n");
for (i = 0; i < 10; i++)
{
printf ("a[%d]=", i+1);
scanf ("%d",&a[i]);
}
for (j = 0;j < 9; j++)
for (i = 0; i < 9 - j; i++)
if (a[i] > a[i+1])
{
t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
printf ("由小到大的顺序为:\n");
for (i = 0; i < 10; i++)
{
printf ("%d,",a[i]);
}
printf ("\n");
return 0;
}
运行结果
请输入十个数:
a[1]=7
a[2]=8
a[3]=9
a[4]=6
a[5]=5
a[6]=4
a[7]=1
a[8]=2
a[9]=3
a[10]=99
由小到大的顺序为:
1,2,3,4,5,6,7,8,9,99。
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
扩展资料:
冒泡排序的思想:
首先,从表头开始往后扫描数组,在扫描过程中逐对比较相领两个元素的大小。若相邻两个元素中,前面的元素大于后面的元素,则将它们互换, 称之为清去了一个逆序。
在扫描过程中,不断地将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,这正是数组中最大元素应有的位置。
然后,在剩下的数组元素中(n-1个元素)重复上面的过程,将次小元素放到倒数第2个位置。不断重复上述过程,直到剩下的数组元素为0为止,此时的数组就变为了有序。
假设数组元素的个数为西,在最坏情况下需要的比较总次数为: (n-1)+(n- 2)+2+1)- n(n-1)/2。
参考资料来源:百度百科-冒泡排序
以上就是关于vb中 冒泡法的程序代码全部的内容,包括:vb中 冒泡法的程序代码、用matlab 程序 冒泡法对10个数由小到大排序、C语言简单冒泡法程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)