鱼C论坛

 找回密码
 立即注册
查看: 2135|回复: 14

[已解决]新手写的冒泡法算法,不懂为什么结果会这样,错的很离谱但不知道错在哪里

[复制链接]
发表于 2016-1-7 11:42:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()
{
        int a[30]={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
        int m,n,i;
        for (m=0;m<=28;m++)
        {
                for(n=0;n<=28;n++)
                {
                        if(a[n]>a[n+1]) 
                        { 
                                i=a[n] ; a[n]=a[n+1] ;a[n=1]=i ;
                        } 
                }
        }
        for (i=0;i<=29;i++)
        {
                printf("%5d",a[i]);
                
        }
}
最佳答案
2016-1-7 20:05:58
这是根据你的代码改的,改动的两处都做了注释~
#include <stdio.h>
void main()
{
        int a[30] = { 256, 165, 1651, 145, 15, 16515, 784, 8971, 18, 9, 49, 498, 498, 45, 445, 66, 22, 55, 4, 52, 2, 55, 6, 6, 44, 2, 2, 85, 5 };
        int m, n, i;
        for (m = 0; m <= 28; m++)
        {
                //for (n = 0; n <= 28; n++)
                for (n = m; n <= 29; n++)//最大下标是29
                {
                        if (a[n]>a[m])
                        {
                                //i = a[n]; a[n] = a[n + 1]; a[n = 1] = i;
                                //这里应该交换a[m]和a[n]
                                i = a[n];
                                a[n] = a[m];
                                a[m] = i;
                        }
                }
        }
        for (i = 0; i <= 29; i++)
        {
                printf("%5d", a[i]);
        }
}
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-7 13:44:46 | 显示全部楼层
#include <stdio.h>
void main()
{
        int a[30]={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
        int m,n,i;
        for (m=0;m<=28;m++)
        {
                for(n=0;n<=28;n++)
                {
                        if(a[n]>a[n+1])
                        {
                                i=a[n] ; a[n]=a[n+1] ;a[n+1]=i ;//这里错了" i=a[n] ; a[n]=a[n+1] ;a[n=1]=i ;"
                        }
                }
        }
        for (i=0;i<=29;i++)
        {
                printf("%5d",a[i]);
               
        }
}

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-7 17:07:44 | 显示全部楼层
i=a[n] ; a[n]=a[n+1] ;a[n=1]=i ;//低级错误

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-7 20:05:58 | 显示全部楼层    本楼为最佳答案   
这是根据你的代码改的,改动的两处都做了注释~
#include <stdio.h>
void main()
{
        int a[30] = { 256, 165, 1651, 145, 15, 16515, 784, 8971, 18, 9, 49, 498, 498, 45, 445, 66, 22, 55, 4, 52, 2, 55, 6, 6, 44, 2, 2, 85, 5 };
        int m, n, i;
        for (m = 0; m <= 28; m++)
        {
                //for (n = 0; n <= 28; n++)
                for (n = m; n <= 29; n++)//最大下标是29
                {
                        if (a[n]>a[m])
                        {
                                //i = a[n]; a[n] = a[n + 1]; a[n = 1] = i;
                                //这里应该交换a[m]和a[n]
                                i = a[n];
                                a[n] = a[m];
                                a[m] = i;
                        }
                }
        }
        for (i = 0; i <= 29; i++)
        {
                printf("%5d", a[i]);
        }
}

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-7 23:11:39 | 显示全部楼层
#include <iostream>
using namespace std;
void main()
{
        int a[30] = { 256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5 };
        int m, n, i;
        for (m = 0; m < 29; m++)
                for (n = 0; n <29 - m; n++)
                        if (a[n]>a[n + 1])
                        {
                                i = a[n]; a[n] = a[n + 1]; a[n + 1] = i;
                        }
        for (i = 0; i <= 29; i++)
        {
                cout << a[i] << ',';
        }
//仔细看代码!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-7 23:13:16 | 显示全部楼层
#include <iostream>
using namespace std;
void main()
{
        int a[30] = { 256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5 };
        int m, n, i;
        for (m = 0; m < 29; m++)
                for (n = 0; n <29 - m; n++)
                        if (a[n]>a[n + 1])
                        {
                                i = a[n]; a[n] = a[n + 1]; a[n + 1] = i;
                        }
        for (i = 0; i <= 29; i++)
        {
                cout << a[i] << ',';
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-11 16:44:47 | 显示全部楼层
for嵌套循环啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-11 19:37:45 | 显示全部楼层
for嵌套的循环是冒泡的精华啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-11 20:43:31 | 显示全部楼层
括号晕掉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-12 17:00:08 | 显示全部楼层
for嵌套循环和三个变量值转换经典啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-16 23:45:41 | 显示全部楼层
#include <stdio.h>
int  main()
{
        int a[29]={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
        int m,n,i;
        for (m=0;m<=28;m++)
        {
                for(n=0;n<=28;n++)
                {
                        if(a[n]>a[n+1])
                        {
                                i=a[n] ;
                                                                 a[n]=a[n+1];
                                                                 a[n+1]=i ; //
                        }
                }
        }
        for (i=0;i<=28;i++)
        {
                printf("%5d\n",a[i]);
               
        }
        
        return 0;
}
这样才对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-18 16:12:18 | 显示全部楼层
楼上大神已经解决了,我把我自己写的排序也贴出来
        int a[5]={2,15,5,4,1};
        int t=0;//比较的时候互换的时候的临时值
        //开始遍历
        for(int i=0;i<5-1;i++){
                for(int j=0;j<5-i-1;j++){
                        if(a[j]>a[j+1]){
                                //完成置换 
                                t=a[j+1];
                                a[j+1]=a[j];
                                a[j]=t;        
                        }
                }                
        }
        
        for(int i=0;i<5;i++){
                printf("%d ",a[i]);
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-1 22:22:51 | 显示全部楼层
第12行  a[n=1]=i  错了
第8行  for(n=0;n<=28;n++)  判断条件应该是 n<=29-m

第一个属于低级失误
第二个错不知道是你笔误,还是没有真的理解冒泡排序,如果不知道为什么这样写,建议你还是百度去看一下冒泡排序的过程和原理
还有程序出了问题要学会自己debug,用编程软件里面的调试功能,一步一步的执行代码,可以添加查看,把每一步各个变量的值都显示出来,这样也有助于你自己发现问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-3 17:11:33 | 显示全部楼层
可以用sort()函数排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-4 13:08:23 | 显示全部楼层
a[30]只有29个数字啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表