Método de clasificación C language_sort algorítm_bubble y método mejorado de clasificación de burbujas

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; 
 }

Supongo que te gusta

Origin blog.csdn.net/qq_51366851/article/details/112986574
Recomendado
Clasificación