1. El método de clasificación de burbujas original
- 1. El principio básico
parte del elemento con subíndice 0 y compara los tamaños de dos elementos adyacentes a [j] y a [j + 1] en un bucle, cada vez si el elemento anterior a [j] es mayor que el después del elemento a [j + 1], intercambie los valores de estos dos elementos. - 2. La
primera ronda del proceso de ejecución : de un [0] a un [n-1] , compare secuencialmente el tamaño de los dos números antes y después, después de repetir n-1 veces, los n datos se cambian a un [ n-1] Posición; la
segunda ronda: de un [0] a un [n-2] , compare el tamaño de los dos números a su vez, después de repetir n-2 veces, los n datos se cambian a la posición de un [n-2];
Repita el proceso anterior para n-1 rondas por turno , y los n datos se ordenarán de pequeños a grandes.
El código específico es el siguiente:
//原始冒泡法
//缺点:对已经排好的数据仍要进行冒泡操作,尽管没有任何数据交换操作
#include<stdio.h>
#define N 10
int main()
{
int a[N],i,j,t;
printf("input %d numbers:\n",N);
for(i=0;i<N;i++) //输入N个数字存放入数组中
scanf("%d",&a[i]);
for(i=0;i<N-1;i++) //N个数共需进行N-1轮
for(j=0;j<N-i-1;j++) //第i轮需要比较N-i-1次
{
if(a[j]>a[j+1]) //若前面一个元素大于后面一个元素,则交换
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<N;i++) //输出排序后的数组
printf("%d ",a[i]);
return 0;
}
2. Método de clasificación de burbujas mejorado
- 1. Principios básicos El
método de burbujeo mejorado y el método de burbujeo original tienen los mismos principios básicos. La diferencia es que el método de clasificación de burbujeo mejorado compensa las deficiencias del método de burbujeo original y agrega una bandera para mejorar la eficiencia del programa.
El código específico es el siguiente:
//冒泡法改进
//设置标志量flag
#include<stdio.h>
#define N 10
int main()
{
int a[N],i,j,t,flag; //引入标志量flag
printf("input %d numbers:\n",N);
for(i=0;i<N;i++) //输入N个数字存放入数组中
scanf("%d",&a[i]);
for(i=0;i<N-1;i++) //N个数共需进行N-1轮
{
flag=0; //flag开始赋值为0
for(j=0;j<N-i-1;j++) //第i轮需要比较N-i-1次
{
if(a[j]>a[j+1]) //若前面一个元素大于后面一个元素,则交换
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=1; //若进行了数据交换,则flag赋值为1
}
}
if(flag==0) break; //如果没有进行数据交换,则结束排序
}
for(i=0;i<N;i++) //输出排序后的数组
printf("%d ",a[i]);
return 0;
}