冒泡排序一趟扫描的结果(冒泡排序总结)
什么叫冒泡排序法进行第一遍扫描后的中间结果?~是冒泡排序法进行第一次扫描后的结果吗?
我给你举个例吧,例如有一列数12 15 14 12 13 2 5 4 8
冒泡第一次是: 2 12 15 14 12 13 4 5 8
其中步骤是(1)8与4比,84所以8的位置确定了;(2)45,所以4要在5前面,5的位置也确定了;(3)42,4的位置确定了;(4)213,13应在2后面,13的位置确定了...如些类推.
其实就是从最后(或最前)一个开始与相轮的数两两相比,小的在前,大的在后直到最后,第一步是这样的,第二步也一样从最后一个开始,N步后那个有序的序列就出来了
是的,第一遍扫描的"中间结果"就是第一遍扫描的"结果"
.输入n个关键码(n≤80),使用冒泡排序法,对这n个关键码排序,输出每一趟的排序结果
冒泡排序是没扫描一次数据就得出一个最大的或最小的数。
for(i=0;in;i++)
{
if(a[i]a[i+1])
交换a[i]和a[i+1];
}
输出a[]数组,这是一趟的结果。再循环n次就得到n趟了!
这是思路,要代码吗?
c语言实现:使用冒泡排序,从小到大排列,输出每一趟排序后的结果以及总的比较次数,
#includestdio.h
int?main()
{
????int?num=6,tep,sum=0;
????int?a[6]=?{2,1,10,8,7,6};
????int?i,j;
????printf("原数组:");
????for(int?p=0;?pnum;?p++)
????????printf("%d?",a[p]);
????puts("");
????for(i=0;?inum-1;?i++)
????{
????????for(j=0;?jnum-i;?j++)
????????{
????????????if(a[j]a[j+1])
????????????{
????????????????tep=a[j];
????????????????a[j]=a[j+1];
????????????????a[j+1]=tep;
????????????}
????????????sum++;
????????}
????????printf("第%d趟排序后:",i+1);
????????for(int?p=0;?pnum;?p++)
????????????printf("%d?",a[p]);
????????printf("此时总比较次数:%d\n",sum);
????}
????return?0;
}
如何用C语言进行冒泡排序,并把每一次排序的结果输出?
#includestdio.h
int?main()
{?int?a[10],?i,?j,?t,?i1;//定义数组;
??for?(i?=?0;?i10;?i++)
??{?printf("请输入第%d次元素:",i+1);
????scanf("%d",?a[i]);//给数组赋值;
??}
??for?(i?=?0;?i??9;?i++)??//10个数,进行9轮比较;
??{?for?(j?=?0;?j??9?-?i;?j++)??//第一个数比较9次,依次递减;
????{?if?(a[j]??a[j?+?1])??//交换值;
??????{?t?=?a[j];
????????a[j]?=?a[j?+?1];
????????a[j?+?1]?=?t;
??????}
????}
????for?(i1?=?0;?i110;?i1++)
????{?printf("%d?",?a[i1]);//输出数组的值;
????}
????printf("\n");
??}
??return?0;
}
C语言冒泡排序问题
C语言冒泡排序法的排序规则:
将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
初始 R[1..n]为无序区。
第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。
即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].keyR[j].key,则交换R[j+1]和R[j]的内容。 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。
第二趟扫描 扫描R[2..n]。
扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。
c语言冒泡排序的编程为:
#include
void sort(int *a,int len)
{int i=0;
int j;
int t;
for(i=0;ilen-1;i++)[1]
{
for(j=0;jlen-i-1;j++)
{
if(a[j]a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main(int argc, char *argv[])
{
int a[10]={
-999,2,3,77,12,88,0,-8,99,100
};
int i=0;
sort(a,10);
for(i=0;i10;i++)
{
printf("%d ",a[i]);
}
return 0;
}