C语言冒泡法,改了好久还是不知道错在哪

blueanr 2018-04-23 08:00:23
第一个代码

#include<stdio.h>
#include<process.h>
#define N 10
void bubble_sort(int a[])
{
int i,t,k;
system("cls");
printf("Bubble sort\n");
printf("old numbers:");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
for(k=0;k<N;k++)
{
for(i=0;i<N-k;i++)
{
if(a[i]<a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
}
}
printf("new numbers:");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}
void selection_sort(int a[])
{
int i,j,t,k;
system("cls");
printf("Selection sort\n");
printf("old numbers:");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
for (i=0;i<N-1;i++)
{
k=i;
for (j=i+1;j<N;j++)
if (a[k]<a[j] )
k = j;
if (k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("new numbers:");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}
void main()
{
int c,a[N],i;
printf("Input %d numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("1.Bubble_sort\n2.Selection_sort\n");
scanf("%d",&c);
switch(c)
{
case 1:bubble_sort(a);break;
case 2:selection_sort(a);break;
}
}


第二个代码

#include<stdio.h>
#define N 10
void main()
{
int i,t,k,a[N];
printf("Bubble sort\n");
printf("old numbers:");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(k=0;k<N;k++)
{
for(i=0;i<N-k;i++)
{
if(a[i]<a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
}
}
printf("new numbers:");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}

两个好像没有什么差,但是运行第一个程序的时候,数组里有0总是出错。

第二个就没错。
...全文
1030 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝莓派Alex 2018-04-28
  • 打赏
  • 举报
回复
越界问题:
for(k=0;k<N;k++)
    {
        for(i=0;i<N-k-1;i++)
        {
            if(a[i]<a[i+1])
            {t=a[i];a[i]=a[i+1];a[i+1]=t;}
        }
    }
白色一大坨 2018-04-28
  • 打赏
  • 举报
回复
第一个程序你参照第二个就好
白色一大坨 2018-04-28
  • 打赏
  • 举报
回复
第二个算法修改:

#include<stdio.h>
#define N 10
void main()
{
	int i, t, k, a[N];
	printf("Bubble sort\n");
	printf("old numbers:");
	for (i = 0; i < N; i++)
		scanf("%d", &a[i]);
	for (k = 0; k < N; k++)
	{
		for (i = 0; i < N - k - 1; i++)
		{
			if (a[i] < a[i + 1])
			{
				t = a[i]; a[i] = a[i + 1]; a[i + 1] = t;
			}
		}
	}
	printf("new numbers:");
	for (i = 0; i < N; i++)
		printf("%4d", a[i]);
	printf("\n");
	system("pause");
}
qq_36260408 2018-04-27
  • 打赏
  • 举报
回复
数组已经越界了,修改一下
mm无捷之路 2018-04-26
  • 打赏
  • 举报
回复
for(k=0;k<N;k++) { for(i=0;i<N-k-1;i++) { if(a[i]<a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} } }
mm无捷之路 2018-04-26
  • 打赏
  • 举报
回复
数据越界了,超出范围
zhouqunhai 2018-04-24
  • 打赏
  • 举报
回复
明显越界了 啊
jiht594 2018-04-24
  • 打赏
  • 举报
回复
调试的时候少用几个数据、排序3-5个数就行了。哪里有问题很容易看出来。
自信男孩 2018-04-24
  • 打赏
  • 举报
回复
第二个code的冒泡算法一样,也是会出现越界。
自信男孩 2018-04-24
  • 打赏
  • 举报
回复
for(k=0;k<N;k++)
    {
        for(i=0;i<N-k-1;i++)
        {
            if(a[i]<a[i+1])
            {t=a[i];a[i]=a[i+1];a[i+1]=t;}
        }
    }
数组越界,当k==0时,i < N;那么i+1就会是N,下表只能是从0~N-1;因此会会越界;
Isnis-fallen 2018-04-23
  • 打赏
  • 举报
回复
if(a[i]<a[i+1]) a[i+1]) 数组越界了 for(k=0;k<N-1;k++) { for(i=0;i<N-k-1;i++)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧