标题:请教 气泡排序
只看楼主
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
结帖率:90%
已结贴  问题点数:20 回复次数:11 
请教 气泡排序
#include<stdio.h>
int main(void)
{
    int i,j,temp,n,index;
    int a[100];
   
    printf("enter n:");
    scanf("%d",&n);
    printf("n=%d\n",n);
    for(i = 0;i < n ;i++)
    scanf("%d",&a[i]);
   
    for(i = 0;i < n;i++)
      
    for(j = i+1;j < n - i;j++)
    if(a[j] > a[j+1])      j=j+1;
         temp = a[j];               
         a[j] = a[j+1];         
         a[i] = temp;
         
   
    printf("after:");
    for(i = 0;i < n;i++)
    printf("%d",a[i]);
    printf("\n");
   
   
    return 0;
}



有小到大排序  不知道哪有问题  请高手指点
搜索更多相关主题的帖子: 气泡 
2009-11-29 21:09
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
得分:0 
for循环
{}

我可好玩啦...不信你玩玩^_^
2009-11-29 21:15
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
得分:0 
具体点么   我知道我FOR循环有问题 不知道怎么改
2009-11-29 21:18
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
得分:0 
for(j = i+1;j < n - i;j++)
    if(a[j] > a[j+1])      j=j+1;//为什么有这个?
       {  
         temp = a[j];               
         a[j] = a[j+1];         
         a[i] = temp;
      }     //这就不多说了。
2009-11-29 21:19
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
得分:0 
我书上气泡使用指针做的   选择排序没用指针  我就想试试不用指针做气泡   J=J+1  是看选择那个上面有这个  我就加进去了。。  可是我就是不太明白是怎么传递较小那个数据的
2009-11-29 21:30
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
得分:0 
以下是引用when159357在2009-11-29 21:30:04的发言:

我书上气泡使用指针做的   选择排序没用指针  我就想试试不用指针做气泡   J=J+1  是看选择那个上面有这个  我就加进去了。。  可是我就是不太明白是怎么传递较小那个数据的
你还是不明白气泡方法是怎么样的方法,建议你好好看看这个方法。
其实就是每次循环,把最小的数排到最前面。不过你的程序是吧最大的数放到最后面,
效果是一样的。。
2009-11-29 21:46
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
得分:10 
#include<stdio.h>
int main(void)
{
    int i,j,t,n;
    int a[100];
   
    printf("enter n:");
    scanf("%d",&n);
    printf("n=%d\n",n);
    for(i = 0;i <n ;i++)
    scanf("%d",&a[i]);
  for (i=0;i<=n-1;i++)
     for (j=0;j<=n-2;j++)
       if (a[j]>a[j+1])
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    printf("after:\n");
    for(i = 0;i <n;i++)
    printf("%d\n",a[i]);
    printf("\n");
      getch();
    return 0;
}

QQ群:96348241
2009-11-29 21:51
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
得分:0 
回复 6楼 hoho568
书上没写气泡是什么   只有源程序  差不多意思是比较两个元素的大小  如果前一个元素大,则交换
源程序for循环是这样的
{
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]);
}
void swap2(int*px,int*py)
{
int t;
t=*px;
*px=*py;
*py=t;
}
2009-11-29 22:01
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
得分:0 
回复 7楼 xy4919961
谢谢你  这个我看懂了  可是我想问下  用指针的源程序   我直接改了for里面的循环体怎么不可以用呢   就是不改i=1;i<n;i++  j=0;j<n-i;j++  直接把IF下面的改了
2009-11-29 22:09
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
得分:10 
以下是引用when159357在2009-11-29 22:09:25的发言:

谢谢你  这个我看懂了  可是我想问下  用指针的源程序   我直接改了for里面的循环体怎么不可以用呢   就是不改i=1;i
i=1 是肯定要改的.数组是从0开始.不是从1开始..

QQ群:96348241
2009-11-29 22:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-293403-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157681 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved