拉锯排序法
拉锯排序法:是起泡排序法的改进,采用“上浮”、“下沉”交替进行的方式“起泡”。有没有大神解释一下,用个简单的小程序演示
表示不太懂
程序代码:#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编辑过]
