gpt4 book ai didi

c - 通过 C 语言进行冒泡排序编程

转载 作者:行者123 更新时间:2023-11-30 21:34:23 25 4
gpt4 key购买 nike

我编写了一个冒泡排序程序,该程序显示运行时错误“NULL 指针分配”。代码如下:

#include <stdio.h>

void main()
{
int a[6], j = 0, count = 0, i, temp;

printf("Enter the number");

for(i = 0; i< 4; i++)
{
scanf("%d", &a[i]);
}

while(count < 4)
{
for(i = 0; i < 4; i++)
{
if(a[i] < a[++j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}

count++;
}

printf("The sorted array is");

for(i = 0; i < 4; i++)
{
printf("\n%d\n", a[i]);
}

getchar();
}

但是当我尝试下面的代码时,它运行成功。

#include <stdio.h>

void main()
{
int a[6], count=0, i, temp;

printf("Enter the number");

for(i = 0; i < 4; i++)
{
scanf("%d", &a[i]);
}

while(count<4)
{
for(i = 0; i < 4; i++)
{
if(a[i] < a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}

count++;
}

printf("The sort array is");

for(i = 0; i < 4; i++)
{
printf("\n%d\n", a[i]);
}

getchar();
}

所以我需要知道为什么我的代码显示错误,以及为什么第二个代码有效。我是C语言的新手,所以请简单地向我解释一下原因。

最佳答案

您收到NULL指针异常的原因是在第一个程序中,当完成while循环的第一次迭代时,j的值已变为4。在 while 循环的第二次迭代中,j 值不会重置,而是从 4 继续。当j等于6时尝试访问a[j]将导致上述错误。

  for (i = 0; i < n - 1; i++) {
for (j = 0; j <= i; j++) {
if(a[j] > a[j + 1]) {
// swap
}
}
}

像这样的东西就可以完成这项工作。

关于c - 通过 C 语言进行冒泡排序编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com