本文目录一览:
关于C语言冒泡算法的详解
冒泡法又称起泡法,属于交换排序.假设待排序数组a的长度是n,排序过程如下:
1)令i=0
2)另j=n-1(从最后一个元素开始)
3)比较a[j-1]与a[j],若a[j-1]a[j],则把它们交换
4)若ji,则令j--,转到3),否则转到5)
5)若in-1,则令i++,转到2),否则转到6)
6)完成排序
C语言冒泡排序原理
for(i=0;iN;i++)//起什么作用
{
for(j=0;jN-i-1;j++)// 不明白N-i-1的原理
if(a[j]a[j+1])//起什么作用
{
//是怎么交换2个值的?
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
这是冒泡的核心,感觉写法跟java差不多,不过这样写不太直观。
首先第一句是从第一个数起比较
N-i-1指的是每循环一轮,最大的数自然在最后。所以每次都要减i
而减1是因为它后面有一个当前数和后面的数对比。
if(a[j]a[j+1])
指的是如果后面的数比前面的数大。则返回真,执行下面的语句。
否则不执行。
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
如果后面的数大,那么就执行。具体的逻辑。
想将A和B的值互换,那么。
temp = A
A=B
B=temp
如果直接A=B,A原来的值就会不见了。
c语言中冒泡排序的实现原理是什么?
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,
j的值依次为1,2,...10-i
求解c语言冒泡排序法,两个for循环里到底是什么
这个应该到网上去搜索啊,不该在这问。
冒泡排序的原理就是:(升序)
依次比较相邻的2个数,把较大的值放在后面,使最后一个数变成数组中的最大值。
循环这个过程,直到所有的数据都按这个规则排列好。此时,排序完毕。
举例:3,2,5,7,1 (升序)
1. 3与2比较,交换 ,数组:2,3,5,7,1
2. 3与5比较, 不交换, 数组: 2,3,5,7,1
3. 5与7比较, 不交换, 数组: 2,3,5,7,1
4. 7与1比较, 交换 , 数组: 2,3,5,1,7
第一次遍历比较完成,此时,最后一个数据就是最大值了。
此后的比较,只要比较2,3,5,1即可,因为最后一个已经是最大的了。
然后再按这个规则循环。
代码的话:
#include stdio.h
int main() {
int i, j, t;
int a[] = {3,2,5,7,1};
int len = 5; //数组长度5
//外层循环,就是按照这个算法:控制需要最多几次循环才能排序完毕
for (i=0;ilen-1;i++) { //注意,只要比较len-1次循环
//内层循环,就相当于上面1-4步,数据两两相比较
for (j=0;jlen-i-1;j++) { //注意,比较次数是:len-i-1次
if (a[j]a[j+1]) {//相邻2个做比较
t = a[j];a[j]=a[j+1];a[j+1]=t; //交换
}
}
}
}
此即冒泡法排序。当然,冒泡还有一些变种,如:增加标志,如果某次循环中,没发生一次交换,则说明已经排序完毕。则结束循环,这样可以加快速度。
C语言:编写一个程序用冒泡排序实现升序排列
程序如下:
#include stdio.h
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。
参考资料来源:百度百科-冒泡排序