您的位置:

冒泡法排序c语言改进,c语言冒泡法排序原理

本文目录一览:

C语言编程:改进冒泡排序程序,使其当数据已经有序时,直接结束排序过程。请给出运算结果。

#include stdio.h

#include stdlib.h

void Bubble(int *a,int n)  //对n个整数从小到大排序

{int i,j,t,k;

 for(i=0;in-1;i++)

 {k=1;

  for(j=0;jn-1-i;j++)

    if(a[j]a[j+1])

    {k=0;t=a[j];a[j]=a[j+1];a[j+1]=t;}

  if(k)break;  

 }

}

int main()

{int m,i;

 scanf("%d",m);

 int *p=(int *)calloc(m,sizeof(int));

 for(i=0;im;i++)

   scanf("%d",p+i);

 Bubble(p,m);

 for(i=0;im;i++)  

   printf("%d ",*(p+i));

return 0;

}

c语言冒泡法排序问题?

不能,比如输入2 5 3 6 8,在第二个for循环当中

【for(j=i+1;jn;j++)

{if(a[i]a[j])

{

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

flag=1;

} 】

你a[i]用的i,而i=0,那么总是a[0]=2与5 3 6 8比,

而a[0]是最小的一个,那么怎么也进不了if循环中

flag就为0咯,又return,就结束咯

换下

for(i=1;in;i++)

{

flag=0; //初始值为0

for(j=0;jn-i;j++)

{if(a[j]a[j+1]) //如果前面的数比后面的数大,进行交换

{

tmp=a[j];

a[j]=a[j+1];

a[j+1]=tmp;

flag=1; //如果发生交换,标识变量设为1

}

即把小数在前就放前不动,拿后面的比,而不是总拿小数去与其他的比

C语言中选择排序法和冒泡排序法代码。

选择排序:

void select_sort(int a[],int n)        //传入数组的要排序的元素个数

{int i,j,min,t;

for(i=0;in-1;i++)

{  min=i;      //min:当前最小值下标

for(j=i+1;jn;j++)        //扫描余下的部分

if(a[min]a[j])        //若有其它元素更小,就记录其下标

min=j;

if(min!=i)        //保若最小值不在排序区首位,就换到首位

{t=a[min]; a[min]=a[i]; a[i]=t;}

}

}

冒泡排序:

void bubble_sort(int a[], int n)        //传入数组的要排序的元素个数

{ int i, j, t;

for (j=0; jn-1; j++)        //n个元素比较n-1轮

for (i= 0; in-1-j;i++)   //比较相信的两个数

if(a[i]a[i+1])          //若大小顺序不符,就交换

{t=a[i];  a[i]=a[i+1]; a[i+1]=t;

}

C语言中选择法排序和冒泡法排序有什么区别

楼主,如果用一组数,按小到大顺序排列,如果用冒泡法,原理是这样的,就是把最小的数放在最后,不断地把底层的较大的数冒泡升上来,选择法是用一个变量不断地选择小的数,将值付给变量再通过变量付给相应位置的数组元素…