冒泡排序演进优化

来源:互联网 发布:mysql删除表语句 编辑:程序博客网 时间:2024/05/27 06:53

冒泡演进优化

要点:相邻两两相比,每次循环将选择最大(小)。类气泡

    void bubble(int a[],int n){    int tmp;    for(int i=0;i<n-1;i++)    {        for(int j=0;j<n-1-i;j++)        {            if(a[j]>a[j+1])            {                //两个数交换有多种方法                tmp = a[j];                a[j] = a[j+1];                a[j] = tmp;            }        }    }}int main(){    int arr[] = {3,5,5,7,2,8,4};    bubble(arr,sizeof(arr)/sizeof(arr[0]));//注意:求数组的元素个数    return 0;}

优化1

若无交换则已排序

void bubble1(int a[],int n){    int tmp,flag;    for(int i=0;i<n-1;i++)    {        flag = 0;        for(int j=0;j<n-1-i;j++)        {            if(a[j]>a[j+1])            {                flag = 1;                tmp = a[j];                a[j] = a[j+1];                a[j+1] = tmp;            }        }        if(flag == 0)            break;    }}

优化2就是

记录交换的最后位置,则后面的无交换则为有序,并把最后的位置作为下次结束位置
可以与优化1类似 优化1是整体看,优化2是部分

void bubble2(int a[],int n){    int tmp,k,flag=n-1;    for(int i=0;i<flag;i++)    {        k = flag;        flag = 0;        for(int j=0;j<k;j++)        {            if(a[j]>a[j+1])            {                flag = j;                tmp  = a[j];                a[j] = a[j+1];                a[j+1] = tmp;            }        }    }}
0 0