epub安卓版:有人可以帮我解释下这个C题吗?

来源:百度文库 编辑:高校问答 时间:2024/05/06 01:19:55
已知序列{17,18,60,40,7,32,73,65,85},采用冒泡泡对这个序列排序!!
请详细说明其中的前因后果,谢谢~
我想知道的是这个泡泡的原理呀~!不用编程工具是怎么个排法的?

泡泡算法~呵呵:
17,18,60,40,7,32,73,65,85
第一遍:9个数字里面选最大的,先从第一个17开始,比较第一个和第二个,把大的放在第2个,再比较第2个和第3个,把大的放第三个,一直比较到第8和第9,把大的放第9,那么第9就是9个里面最大的了,结果:
17,18,40,7,32,60,65,73,85
哈哈,85冒个泡泡给冒出来了~

第2遍,由于第9个已经是最大的了,用相同的比较方法比较1到8,把最大的冒泡冒到第8,这个时候第8就是剩下8个里面最大的,如此反复,所有的数就按最小到最大挨个冒泡冒出来呵呵,第2遍结果:
17,18,7,32,40,60,65,73,85 73被冒出来~
第3次结果:
17,7,18,32,40,60,65,73,85 65冒出来
第4次:
7,17,18,32,40,60,65,73,85

到这里,再继续比较到第9次,就能把整个排出来,但是由于这个数列从这个时候已经整齐了,后面都不会再变动,所以我们通常设置一个信号量来判断该次如果没有变动,就不用做下面每一步了,从而提高了效率,这种办法就变成了教科书里面的优化的冒泡泡呵呵~

就是用一个两层的循环来逐个比较每两个元素之间的大小,如果靠前的元素比后面的大的话就把两个元素位置互换。循环完了以后的数组就是排序好的了

for (int i=0;i<maxn-1;i++)
for (int j=i+1;j<maxn;j++)
{
if (data[i]>data[j])//如果i比j上的元素大则位置互换
{
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}

呵呵,冒泡泡
冒泡排序的思想是从前向后扫描一遍,将最大的数字放到最后面去,这样只需要再排前n-1个数字了,然后用同样的方法,一共扫描n遍就可以将该数列排成有序数列了
假设该数列为arr[9]
int i,j,t;
for(i=0;i<9;i++)
for(j=1;j<9-i;j++){
if(arr[i-1]>arr[i]){
t = arr[i-1];
arr[i-1] = arr[i];
arr[i] = t;/*交换*/
}
}
这样处理后,就排好序了

Bubble Sort(冒泡法)

冒泡排序法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意上下两个气泡的顺序是否正确。若“轻”的在下,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。
void main()
{
int a[9]={17,18,60,40,7,32,73,65,85};
int i,j,tmp;
for (i=0;i<8;i++) { // 共检查 9 遍
for (j=i+1;j<9;j++){
if (a[j] < a[i]) {
tmp=a[j];a[j]=a[i];a[i]=tmp;
}
};
}
// 这里可以打印结果
}

共检查 9 遍
第一次检查a[0],a[0]与a[j]比较,j=1,2,...到最后一个.
若a[j]<a[i],做交换.
a[0]=17;
a[1]=18;不满足条件,不交换;
a[2]=60;不满足条件,不交换;
a[3]=40;不满足条件,不交换;
a[4]=7;满足条件,做交换;交换后a[0]=7;a[4]=17;
a[5],a[6],a[7],a[8]都不满足条件,不交换;
第一次检查后变成
{7,18,60,40,17,32,73,65,85},a[0]最小
第二次检查,查a[1],
a[1]=18;
a[2]=60;不满足条件,不交换;
a[3]=40;不满足条件,不交换;
a[4]=17;满足条件,做交换;交换后a[1]=17;a[4]=18;
a[5],a[6],a[7],a[8]都不满足条件,不交换;
第二次检查后变成
{7,17,60,40,18,32,73,65,85},a[1]第二最小
第三次检查,查a[2],
a[2]=60;
a[3]=40;满足条件,做交换;交换后a[2]=40;a[3]=60;
a[4]=18;满足条件,做交换;交换后a[2]=18;a[4]=40;
a[5],a[6],a[7],a[8]都不满足条件,不交换;
第三次检查后变成
{7,17,18,60,40,32,73,65,85},a[2]第三最小.
第四次检查,查a[3],
a[3]=60;
a[4]=40;满足条件,做交换;交换后a[3]=40;a[4]=60;
a[5]=32;满足条件,做交换;交换后a[3]=32;a[5]=40;
a[6],a[7],a[8]都不满足条件,不交换;
第四次检查后变成
{7,17,18,32,60,40,73,65,85},
...
第五次检查后变成
{7,17,18,32,40,60,73,65,85},
第六次检查后变成
{7,17,18,32,40,60,65,73,85},
第七次检查后
{7,17,18,32,40,60,65,73,85},
第八次检查后
{7,17,18,32,40,60,65,73,85},

既然说完了
我就路过