您的位置:

冒泡原理c语言,c语言程序设计冒泡法

本文目录一览:

关于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。

参考资料来源:百度百科-冒泡排序