双向冒泡

先从下向上从无序区冒出一个最小元素,再从上向下从无序区冒出一个最大的元素。

#include<stdio.h>
#define M 5
int main()
{
    int a[M],i,j,l,r,tmp;
    for(i=0;i<M;i++) scanf("%d",&a[i]);
    l=0,r=M-1,j=M-1;
    while(l!=r) {
        while(j>l) {
            if(a[j]<a[j-1]) {
                tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
            }
            j--;
        }
        l=++j;
        while(j<r) {
            if(a[j]>a[j+1]) {
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
            j++;
        }
        r=--j;
        //for(i=0;i<M;i++) printf("%d ",a[i]);
        //printf("\nl=%d r=%d\n\n",l,r);
    }
    for(i=0;i<M;i++) printf("%d ",a[i]);
    return 0;
}

 

posted @ 2023-10-16 15:16  夜雨声不烦  阅读(6)  评论(0编辑  收藏  举报