我遇到的问题是数组中的最高值被随机垃圾负值替换。我无法找到问题所在。这是该程序的完整源代码 -
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int num[10],i,choice,counter=1;
printf("\n\n=====Program To Sort Integer Array=====\n\n");
printf("\nPlease Enter 10 Array Elements = \n");
for (i = 0; i < 10; i++)
{
printf("\nPlease Enter The %d Element Of The Array\n", i);
scanf("%d", &num[i]);
}
printf("\n\nHow Would You Like To Sort The Entered Array?\n1. Bubble Sort\n2. Selection Sort\n3. Insertion Sort\n\n");
scanf("%d", &choice);
switch (choice)
{
case 1:{
printf("\nYou Have Selected Bubble Sort\n");
while (counter != 0)
{
counter = 0;
for (i = 0; i < 10; i++)
{
if (num[i]>num[i + 1])
{
int temp=0;
temp = num[i];
num[i] = num[i + 1];
num[i + 1] = temp;
counter++;
break;
}
}
}
printf("\n\nThe Array In Ascending Order Is =\n");
for (i = 0; i < 10; i++)
{
printf("\n%d", num[i]);
}
break;
}
default:
break;
}
_getch();
}
数组已部分排序,但最高数字正在被替换。另外,我正在使用Visual Studio。
提前致谢
答案 0 :(得分:1)
for (i = 0; i < 10; i++) { if (num[i]>num[i + 1]) { int temp=0; temp = num[i]; num[i] = num[i + 1]; num[i + 1] = temp; counter++; break; } }
当我到达9时会发生什么?你比较num [9]和num [10] - 第10和第11个元素。
我假设您已经知道如果尝试访问越界数组元素会发生什么。如果越界值恰好大于num [9],则将其与num [9]交换 - 所以现在数组有一个垃圾值,你只是覆盖了那个不属于数组的部分。 / p>
解决方案:将i < 10
更改为i < 9
。只需要检查9对元素(0 / 1,1 / 2,2 / 3,...,8/9)。