标题:有学习了冒泡算法的么?能帮忙解惑么?谢谢了!
只看楼主
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
结帖率:75%
 问题点数:0 回复次数:5 
有学习了冒泡算法的么?能帮忙解惑么?谢谢了!
冒泡算法,本人的代码如下:还请老司机能帮忙解答下困惑。 程序没法运行。因为是自学,所以很多东西都不懂。还请老司机解答下!谢谢了!

///练习1.1  冒泡算法,假设有一个10元素的数组,即n=10.求其中最大值得元素。//
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int i=0, j=0, n=10, t=0;
    int a[10];     
    printf("请用户输入一组10个数:\n");     
    for(i = 1; i <= n; i++)
        scanf("%d ", &a[i]);

    for(i = 1; i < n-1; i++ )   //一个数排序要,比较1轮,n个数,要比较n-1轮,才能按照冒泡递减顺序排列!//
    {
        for(j = 1; j < n-j; j++)    //逻辑地址上的,第J个做比较的数,要与n-j个数做比较,并以数值递减的顺序排列!//  这网上是n-i,可我觉得n-j,可以么?
            if(a[j] < a[j+1])          //分别与两边的数做比较//
          {
            t = a[j];         //将原a[j]中的值存储在t中,故地址a[j]中的内存为空。//
            a[j] = a[j+1];      //交换a[j+1]的值,存储到地址a[j]中。     将a[j+1]中的值赋值到地址aj(此时地址a[j]内存为空)中,故此时地址aj的值为原地址a[j+1]的值()较大的值。故此时地址aj+1]中的内存为空//
            a[j+1] = t;         //交换a[j]的值,存储到地址a[j+1]中。将t中的值(原来地址a[j]的值赋值给地址aj+1,此时a[j+1]的值为原地址aj的值!)//
           }
    }

    for(j = 1; j <= n; j++)         //打印输出按照冒泡递减顺序排列的数组//   这网上用的是变量i,可我用变量j,可以么?
        printf("%d",a[j]);
   
    getchar();
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: 冒泡 算法 for 比较 地址 
2017-07-11 10:07
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
  for(j = 1; j <= n; j++)         //打印输出按照冒泡递减顺序排列的数组//   这网上用的是变量i,可我用变量j,可以么?
        printf("%d",a[j]);

这一步就是输出数组元素  和你用哪个循环变量没有任何关系  循环变量吗 一个中间变量而已或者说临时变量

DO IT YOURSELF !
2017-07-11 10:26
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 

DO IT YOURSELF !
2017-07-11 10:28
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
得分:0 
回复 2楼 wp231957
xiexie
2017-07-11 10:46
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
这个不对哦

for(i = 1; i <= n; i++)
        scanf("%d ", &a[i]);

c语言中数组的下标从0开始 至N-1结束 也就是说 10个元素的下标是0---9  

DO IT YOURSELF !
2017-07-11 10:49
章邯
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:43
注 册:2016-12-18
得分:0 
#include <stdio.h>
int main()
{
    int arr[10]={1,3,2,4,6,5,8,9,7,21};
    int tep;
    for(int i=0;i<9;i++)//十个数需要比较九趟
    {
        for(int j=i;j<9-i;j++)//每一趟都少比较一个数
        {
            if(arr[j]>arr[j+1])//如果发现顺序不对
            {
                tep=arr[j];//进行顺序交换
                arr[j]=arr[j+1];
                arr[j+1]=tep;
            }
        }
    }
   
    for(int i=0;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
   
    printf("\n");
   
    return 0;
   
}
2017-07-11 11:05



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




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

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