标题:这个该进的冒泡排序什么地方错了?
只看楼主
dhz662820909
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-28
结帖率:40%
已结贴  问题点数:20 回复次数:11 
这个该进的冒泡排序什么地方错了?
#include<stdio.h>
void BubbleSort(float a[],int n,int *p);
int main(void)
{
    float a[10]={20,12,14,10,8,6,5,3,2,1};/*{3,3.1,5,4,10,25.1,2.9,4,7,3.3}*/
    int n,b;
    BubbleSort(a,10,&b);
    for(n=0;n<10;n++)
    printf(" %f",a[n]);
    printf("\n");
    printf("b=%d\n",b);
    system("pause");
    return(0);
}
void BubbleSort(float a[],int n,int *p)
{
     int i,j,k;
     float temp;
     for(j=0;j<10-1;j++)
     {
                        for(k=0,i=0;i<10-j-1;i++)
                        {
                                             if(a[i]<a[i+1])
                                             {
                                                            temp=a[i];
                                                            a[i]=a[i+1];
                                                            a[i+1]=temp;
                                                            k=1;
                                                            
                                             }
                                             
                        }
                        if(k=0)
                        {
                               *p=j;
                               break;
                        }

     
     }

}
我想要减少比较的次数,就是排序进行到某一步,已经能够排好顺序了,想要退出,并且记录第几次排好顺序的。
搜索更多相关主题的帖子: include system return 
2013-11-12 18:15
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:3 
只问  错了   而不说那里错了

DO IT YOURSELF !
2013-11-12 18:53
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 
你的意思应该是为什么不能输出 b 吧?    这是因为...   你定义的函数没有返回值....
以下红色部分是改动

#include<stdio.h>
int BubbleSort(float a[],int n,int *p);
int main(void)
{
    float a[10]={20,12,14,10,8,6,5,3,2,1};  /*{3,3.1,5,4,10,25.1,2.9,4,7,3.3}*/
    int n,*b;
    b=BubbleSort(a,10,b);
    for(n=0;n<10;n++)
        printf(" %f",a[n]);
    printf("\n");
    printf("b=%d\n",b);
    system("pause");
    return 0;
}
int BubbleSort(float a[],int n,int *p)
{
     int i,j,k;
     float temp;
     for(j=0;j<10-1;j++)
     {
         for(k=0,i=0;i<10-j-1;i++)
         {
             if(a[i]<a[i+1])
             {
                 temp=a[i];
                 a[i]=a[i+1];
                 a[i+1]=temp;
                 k=1;
             }
         }
         if(k=0)
         {
             *p=j;
             break;
         }
     }

}

三十年河东,三十年河西,莫欺少年穷!
2013-11-12 19:17
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
得分:2 
冒泡法,想想你改进的算法有没有问题吧

编写的程序,不能改变世界,却可以改变自己...
2013-11-12 19:22
于雷
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2013-11-12
得分:5 
回复 楼主 dhz662820909
想法很好,但是就你举的例子来看,因为20大于后面的所有值,所以if中的语句不会被执行,k的值仍为0。
跳出第二个循环后会判断k值,此时k=0所以执行break跳出程序。所以还没排好程序就结束了。
我好象记得高数1上有类似的知识,不妨看一看。希望能帮到你。
2013-11-13 09:49
dhz662820909
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-28
得分:0 
回复 5楼 于雷
谢谢,回复有点迟了,我试试看
2013-11-14 17:42
dhz662820909
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-28
得分:0 
回复 3楼 韶志
非常感谢,我试试看
2013-11-14 17:42
dhz662820909
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-28
得分:0 
回复 2楼 wp231957
是这样,我想要减少比较的次数,因为可能排到某一步的时候,数组已经是拍好顺利的了。

这个程序执行后,发现可以实现冒泡排序,但是不能返回b,照理我的这个是指针,并不是返回某个数,应该和空函数没有关系的。
2013-11-14 17:46
dhz662820909
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-10-28
得分:0 
回复 3楼 韶志
只是照理,我这个是指针,void应该影响不到的。

我试试各位的回复,非常感谢
2013-11-14 17:47
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:10 
回复 9楼 dhz662820909
&b是指针?
你指望它帮你装东西?
它只是变量 b 的地址好不好...

三十年河东,三十年河西,莫欺少年穷!
2013-11-14 19:41



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




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

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