拉锯排序法
拉锯排序法:是起泡排序法的改进,采用“上浮”、“下沉”交替进行的方式“起泡”。有没有大神解释一下,用个简单的小程序演示
表示不太懂
#include<stdio.h> int fun(int a[10],int i,int j) { int t; int k=i; for (;i<j;i++) if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } for (;i>k;i--) if (a[i]<a[i-1]) { t=a[i]; a[i]=a[i-1]; a[i-1]=t; } if (i<5) return fun(a,++i,--j); else return 0; } int main() { int a[10]; int i; for (i=0;i<10;i++) scanf("%d",&a[i]); fun(a,0,9); for (i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); return 0; }
#include<stdio.h> #include<math.h> #define N 10 #define A N-1-k-abs(i) #define B N-1-k-abs(i-1) void swap(int *a,int *b) { *a^=*b; *b^=*a; *a^=*b; } int fun(int a[N],int k) { int i; for (i=N-1-2*k;i>-(N-1)+2*k;i--) { if ((A>B)^(a[A]<a[B])) swap(&a[A],&a[B]); } if (k<N/2) return fun(a,++k); return 0; } int main() { int a[N]; int i; for (i=0;i<N;i++) scanf("%d",&a[i]); fun(a,0); for (i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); return 0; }
[此贴子已经被作者于2016-11-27 17:17编辑过]