| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 787 人关注过本帖
标题:求大神解答,原始数组没有问题,但为什么排序后出现了出乎意料的结果
只看楼主 加入收藏
谢晓乐
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2014-8-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求大神解答,原始数组没有问题,但为什么排序后出现了出乎意料的结果
图片附件: 游客没有浏览图片的权限,请 登录注册

求教各位,我的程序代码如下,是在Visual Studio中写的;
已经定义好的数组在排序之前是没有问题的,但排序过后就会出问题,Release时而有问题,Debug是每次必出问题;
求大神指点
程序代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void maopao(int a[]);
void exchange(int *a, int *b);

#define LENGTH 100

int main()
{
    int a[LENGTH],counter=0;
    srand(time(NULL));
    while (1)
    {
        for (counter = 0;counter < LENGTH; counter++)
        {
            a[counter] = rand() % 100000;
        }
        maopao(a);
        printf("\nIt's over\nPress ENTER to run again\n");
        getchar();
    }
    return 0;
}
void exchange(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
void maopao(int a[])
{
    int i,j,output;
    printf("Before:\n\n");
    for (output = LENGTH - 1;output >= 0;output--)
    {
        printf("\tNo.%d\t=%d\n ", output + 1, a[output]);
    }
    printf("\n\n\n");
        for (i=0;i<=LENGTH-1;i++)
        {
            for (j = 0;j <= LENGTH-i;j++)
            {
                if (a[j] > a[j + 1])
                    exchange(&a[j], &a[j + 1]);
            }
        }
        printf("After:\n\n");
        for (output = LENGTH-1;output>=0;output--)
        {
            printf("\tNo.%d\t=%d\n ",output+1, a[output]);
        }
}
2016-12-11 19:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:15 
很明显 有一组数据越界了

DO IT YOURSELF !
2016-12-11 20:45
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1688
专家分:4262
注 册:2007-12-27
收藏
得分:5 
冒泡冒冒了

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2016-12-11 20:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
恩,我用DEV C++ 测试几次 并没有溢出现象

DO IT YOURSELF !
2016-12-11 20:50
谢晓乐
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2014-8-5
收藏
得分:0 
回复 4楼 wp231957
嗯,谢谢,我再看看吧
2016-12-12 14:48
谢晓乐
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2014-8-5
收藏
得分:0 
这个代码没问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void maopao(int a[]);
void exchange(int *a, int *b);

#define LENGTH 100

int main() {
  int a[LENGTH], counter = 0;
  srand(time(NULL));
  for (counter = 0; counter < LENGTH; counter++) {
    a[counter] = rand() % 10000;
  }
  maopao(a);
  for (int output = 0; output < LENGTH; ++output) {
    printf("a[%d]=\t%d\n", output, a[output]);
  }
  return 0;
}
void exchange(int *a, int *b) {
  int temp;
  temp = *a;
  *a = *b;
  *b = temp;
}
void maopao(int a[]) {
  int i, j, output;
  for (i = 0; i < LENGTH; i++) {
    for (j = 0; j < LENGTH - i - 1; j++) {
      if (a[j] > a[j + 1]) {
        exchange(&a[j], &a[j + 1]);
      }
    }
  }
}

2024-08-10 13:34
快速回复:求大神解答,原始数组没有问题,但为什么排序后出现了出乎意料的结果
数据加载中...
 
   



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

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