帮忙解释一下冒泡法双向排序的程序
main(){
int a[100],i,m;
printf("How many number?\n");
scanf("%d",&i);
for (m=0;m<i;m++)
{
printf("num %d:\n",m+1);
scanf("%d",&a[m]);
}
printf("=====================================\n");
sort(a,i);
printf("After sorted \n");
for (m=0;m<i;m++)
printf("%d ",a[m]);
getch();
}
sort(int p[],int n) /*int p[],n;*/
{
int j,k,l,r,temp;
for (l=1,r=n-1,k=n;l<r;r=k-1)
{
for (j=r;j>=1;j--) /* 上浮 */
if (p[j-1]>p[j])
{temp=p[j-1];p[j-1]=p[j];p[j]=temp;k=j;}
for (j=l=k+1;j<=r;j++) /* 就是这里啊 */
if (p[j-1]>p[j])
{temp=p[j-1];p[j-1]=p[j];p[j]=temp;k=j;}
}
}
程序运行没问题,就是这点想不通,如果我输入5个数,1,2,3,4,5,的话,前一个数总是比后一个数小,J应该没机会给K赋值啊?而在运行时下个循环时K+1相当于N+1啊,按理来说就不对啊,不是上浮下沉啊??
我知道我的想法错了,希望大家帮忙解释一下