冒泡排序

来源:互联网 发布:mac版本网游 编辑:程序博客网 时间:2024/06/05 11:47
数组下标   0      1     2     3     4      5
初始数据   55    33   88   66   22   77
第一趟 完   33   55   66   22   77   88
第二趟 完   33   55   22   66   77   88
第三趟 完   33   22   55   66   77   88
第四趟 完   22   33   55   66   77   88
第五趟 完   22   33   55   66   77   88  
此数组有6个元素 需要比5趟  (定义变量 j 记录趟数,变量len表示数组元素个数)  for(j=0;j<len-1;j++)
每一趟的代码如下(变量i表示每一趟比较的次数)
for(i=0;i;i++)
{
if(arr[i]>arr[i+1])
{
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
                  }
      }
但是每一趟比完后都可以确定一个元素的位置,即:
第一趟需要比5次
第二趟需要比4次
第三趟需要比3次
第四趟需要比2次
第五趟需要比1次
优化后代码为:
  for(i=0;i<len-1-j;i++)
{
if(arr[i]>arr[i+1])
{
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}


完整代码如下:

#include<stdio.h>
void main()
{
int i,k,j;
int temp=0;
int arr[]={55,33,88,66,22,77};
int len = sizeof(arr)/sizeof(arr[0]);    //len表示数组个数
for(j=0;j<len-1;j++)
{
   for(i=0;i<len-1-j;i++)
{
if(arr[i]>arr[i+1])    // if 进行元素比较
{
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
for(k=0;k<len;k++)
{
printf("%d\n",arr[k]);  
}
}
原创粉丝点击