冒泡排序法

数组A的6个变量依次为12,4,7,6,14,9。冒泡排序法自右向左进行比较和交换,降序排序(即自大到小排列)第一轮过程中,发生了( )次数据交换。

A.3 B. 5C. 6 D.4

B 递增冒泡排序得原理是的是相邻2个元素比较如果为递减则交换第一趟16,9,4,25,15,2,13,18,17,5,8,249,16,4,25,15,2,13,18,17,5,8,24 9,4,16,25,15,2,13,18,17,5,8,24 9,4,16,25,15,2,13,18,17,5,8,24 9,4,16,15,25,2,13,18,17,5,8,24 9,4,16,15,2,25,13,18,17,5,8,249,4,16,15,2,13,25,18,17,5,8,249,4,16,15,2,13,18,25,17,5,8,249,4,16,15,2,13,18,17,25,5,8,249,4,16,15,2,13,18,17,5,25,8,249,4,16,15,2,13,18,17,5,8,25,249,4,16,15,2,13,18,17,5,8,24,25第一趟排序结束,毫无疑问,25是最大的数,在程序中就不需要再次于25进行比较了 第二趟9,4,16,15,2,13,18,17,5,8,24,254,9,16,15,2,13,18,17,5,8,24,254,9,16,15,2,13,18,17,5,8,24,254,9,15,16,2,13,18,17,5,8,24,254,9,15,2,16,13,18,17,5,8,24,254,9,15,2,13,16,18,17,5,8,24,254,9,15,2,13,16,18,17,5,8,24,254,9,15,2,13,16,17,18,5,8,24,254,9,15,2,13,16,17,5,18,8,24,254,9,15,2,13,16,17,5,8,18,24,25 最后结果B
(4,9,15,2,13,16,17,5,8,18,24,25)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-27
voidsort(intarray[],intn)//定义一个整数数组array[],定义一个整数n
{
inti,j,k,t;//定义整数i,j,k,t
for(i=0;i<n-1;i++)//令i=0,在i小于n-1的时候执行{}以内的函数,执行完成后i加1
{
k=i;//令k=i
for(j=i+1;j<n;j++)//令j=i+1,在j小于n的时候,执行以下函数,执行完成后j加1
if(array[j]<array[k])//如果array[j]<array[k]
k=j;//令k=j
t=array[k];array[k]=array[i];array[i]=t;//array[i]和array[k]交换数值
}
}
我们看一遍这个函数,从第一个for开始。令i=0,首先判断i是否小于n-1,因为上面n没有定义具体的数值,我们假设n为10,那么现在i是小于n-1(9)的,那么执行{}里的函数。
k=i//因为i=0,所以k=0
for(j=i+1;j<n;j++)//j=i+1=1,判断j是否小于n,因为j=1,n=10,所以j<n,执行下一个函数
if(array[j]<array[k])k=j;//array[j]即array[1],array[k]即array[0],这是判断array[0]和array[1],如果数组的第一个值小于第2个值,那么k=j,即k=1,否则k的值不变。执行完这个函数之后要执行上面一个for函数的j++操作,即j=j+1=2,然后再比较array[j]和array[k]的大小,如此循环到j=n-1的时候,一个数组所有的数值都已经对比完成,那么k就是所有数组中最大的一个值了。。令array[0]=array[k]即完成了第一轮的冒泡,最大的数值已经被赋到array[0]了。然后再回到第一个for函数执行i++,再选出剩余数值里最大的值。。。。循环结束后,数据就是按照从大到小排序了。。
如果有问题你可以百度hi我~~
第2个回答  2019-03-18
你好,冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
第3个回答  2018-11-27
用冒泡排序法对n个关键码排序,在最好的情况下也就是数据按关键码排序次序有序,只需要依次从头到尾挨个比较就可以了,因此比较次数为n-1次,关键码不移动,所以0次移动
在最坏的情况下为关键码按排序顺序完全逆序,第k趟都有n-k个关键码比较,
因此数据一共要做n*(n-1)/2次比较,移动次数则为3n*(n-1)/2
这样就是错误A
第4个回答  2019-03-18
第一轮显然是 4 次

正确结果几次?追问

为啥是4……

不是两两比较么……求解

我怎么看都是三次啊_(:з」∠)_

追答

冒泡
是先定一个,用这个和剩下的比较

你大概是 左右对称的两个比较

追问

不是…我好像一直以为是从右到左从大到小…

谢谢了

本回答被提问者采纳