冒泡排序优解

1:直接冒泡

 #include
int main()
{
     
    int i,j;
    int t;
    int a[]={
     10,9,8,7,6,5,4,3,2,1};//此排序实现顺序排序
    int s=sizeof(a)/sizeof(a[0]);//求数组元素个数
    for(i=0;i<s-1;i++)//确定排序的趟数
    {
     
        //下面为每趟冒泡排序
        for(j=0;j<s-1-i;j++)
        {
     
            if(a[j]>a[j+1])
            {
     
                t=a[j];a[j]=a[j+1];a[j+1]=t;
            }
        }
    }
    for(i=0;i<s;i++)//验证结果
    {
     
        printf("%d ",a[i]);
    }
    return 0;
}


2:函数冒泡

#include
void mppx(int a[],int s)
{
     
    int i,j;
    int t;
    for(i=0;i<s-1;i++)
    {
     
        for(j=0;j<s-1-i;j++)
        {
     
            if(a[j]>a[j+1])
            {
     
                t=a[j];a[j]=a[j+1];a[j+1]=t;
            }
        }
    }
}
int main()
{
     
    int a[]={
     10,9,8,7,6,5,4,3,2,1};//此排序实现顺序排序
    int i;
    int s=sizeof(a)/sizeof(a[0]);
    mppx(a,s);//冒泡排序函数,这里a是传递a数组首元素的地址&a[0]
    for(i=0;i<s;i++)
    {
     
        printf("%d ",a[i]);
    }
    return 0;
}


3:冒泡优化

 #include
void mppx(int a[],int s)
{
     
    int i,j;
    int t;
    for(i=0;i<s-1;i++)
    {
     
        int f=1;//假设在一趟排序后数据已经有序
        for(j=0;j<s-1-i;j++)
        {
     
            if(a[j]>a[j+1])
            {
     
                t=a[j];a[j]=a[j+1];a[j+1]=t;
                f=0;//当f=0时,表示数组还没有有序
            }
        }
        if(f==1)//当有序的时候就直接跳出来,提高效率
        {
     
            break;
        }
    }
}
int main()
{
     
    int a[]={
     10,9,8,7,6,5,4,3,2,1};
    int i;
    int s=sizeof(a)/sizeof(a[0]);
    mppx(a,s);
    for(i=0;i<s;i++)
    {
     
        printf("%d ",a[i]);
    }
    return 0;
}


排序后结果·
冒泡排序优解_第1张图片

总结:冒泡排序的核心部分就是双重嵌套循环,因此复杂度比较高。
个人心得:一个月太久,只争朝夕!

你可能感兴趣的:(c语言,快速排序)