冒泡排序

所谓冒泡排序,本质上是从后往前确定元素的过程.

void swap(int *p,int *q)
{
    *p^=*q;
    *q^=*p;
    *p^=*q;
}
void popsort(int* p,int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
    {
           if(p[j]>p[j+1])
           {
               swap(&p[j],&p[j+1]);
           }
    }
    }

}

该代码存在部分缺点,因为如果一轮比较下来已经有序的话就没有必要进行比较了,下面进行优化。

void swap(int *p,int *q)
{
    *p^=*q;
    *q^=*p;
    *p^=*q;
}
void popsort(int* p,int n)
{
    int flag;
    for(int i=0;i<n-1;i++)
    {
        flag=1;
        for(int j=0;j<n-1-i;j++)
    {
           if(p[j]>p[j+1])
           {
               swap(&p[j],&p[j+1]);
               flag=0;
           }
    }
        if(flag==1)
            break;
    }

}

这里面设置一个标志位flag,假设刚开始是有序的,也就是让flag=1,内重循环一趟之后发现有序说明整体是有序的,那么就没有必要进行比较了,直接break出来就好了。

 

posted @ 2022-01-10 14:40  sunshine_gzw  阅读(18)  评论(0编辑  收藏  举报