论坛: 编程破解 标题: 这样的起泡算法对吗?一个疯狂追赶的人的请问! 复制本贴地址    
作者: J [jsophie]    论坛用户   登录
这个起跑排序的算法是不是对的
void bubble(r,n)
int n,r;
{int i,j,temp;
for(i=1;i<=n-2;i++){
for(j=1;j<n-i;j++)
  if(r[j].key>r[j+1].key)
{temp=r[j];r[j]=r[j+1];r[j+1]=temp;}
}
return;
}

我怎么都觉得有问题,特别是两个for语句,
我觉得应该是
for(i=1;i<=n-1;i++)
for(j=1;j<=n-i;j++)
这里是假设有n个节点,那么一共起泡就要n-1次,并且第一次是n-1,第2次是n-2,最后一次是1.
但上面的算法我看不出来这样的体现啊,但书上这样写的,请各位帮我分析下,
我才开始学C,我知道我现在年龄或许已经晚了,但我真的很想把我希望的一些东西学好.

地主 发表时间: 07-02-27 00:40

回复: jhkdiy [jhkdiy]   版主   登录
代码:

void bubble(int *r, int n)
{
    int i,j,temp;
    for(i=1;i<=n-2;i++){
        for(j=1;j<n-i;j++)
        if(r[j] > r[j+1])  /* 如果r是数组的话不应该是r[j].key这种形式的 */
        {
            temp=r[j];r[j]=r[j+1];r[j+1]=temp;
        }
    return 0;
}



一个完整的例子:

代码:

#include<stdio.h>
#define SIZE 20
void main()
{
int a[SIZE]={1,3,5,4,9,2,8,7,6,19,20,17,16,11,10,13,14,12,15,18};
int i,pass,hold;
printf("Data items in oraginal order\n");
for(i=0;i<=SIZE-1;i++)
    printf("%4d",a[i]);
for(pass=1;pass<=SIZE-1;pass++)  /*比较的趟数*/
    for(i=0;i<=SIZE-2;i++)    /*比较一趟*/
      if(a[i]>a[i+1])  /*比较一次*/
      {
          hold=a[i];    /*一次数值交换*/
          a[i]=a[i+1];
          a[i+1]=hold;
      }
printf("\nDate items in ascending order\n");
for(i=0;i<=SIZE-1;i++)
    printf("%4d",a[i]);
printf("\n");
}




[此贴被 jhkdiy(jhkdiy) 在 02月27日11时18分 编辑过]


[此贴被 jhkdiy(jhkdiy) 在 02月27日11时21分 编辑过]

B1层 发表时间: 07-02-27 11:16

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号