双向冒泡
先从下向上从无序区冒出一个最小元素,再从上向下从无序区冒出一个最大的元素。
#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; }