冒泡排序可以多次使用吗

如题,冒泡排序可以多次使用吗,我前两次用冒泡都实现了,第三次冒泡的时候总是会影响到前面两两位,这个用冒泡法该怎么做呢

img

有2种方法可用
1遍历找出最大最小按要求放置跳过2个位置继续直到完成
2控制比较方向每次只整理一个数据跳过1个位置
建议使用第一方案

#include<stdio.h>
void output(int arr[],int b,int e)
{
    for(int i=b; i<=e; i++)
        printf("%d ",arr[i]);
}
void swap(int a,int b,int arr[])
{
    int tem=arr[a];
    arr[a]=arr[b];
    arr[b]=tem;
}
void sort(int arr[],int b,int e,int p) //下标 
{
    if(p)
        for(int i=b; i<=e; i++)
            for(int j=b; j<e-i+b; j++)
                if(arr[j]>arr[j+1])
                    swap(j,j+1,arr);
    if(!p)
        for(int i=b; i<=e; i++)
            for(int j=b; j<e-i+b; j++)
                if(arr[j]<arr[j+1])
                    swap(j,j+1,arr);
}

int main()
{
    int arr[]={9, 1, 4, 2, 3, 6, 5, 8, 7};
    int size=sizeof(arr)/sizeof(int);
    for(int j=0; j<size; j++)
    {
        int p=j%2==0;
        sort(arr,j,size-1,p);
        output(arr,j,j);
    }
    return 0;
}