在气泡排序中获取垃圾值以获得C中的最高值

时间:2014-01-31 10:17:05

标签: c sorting

我遇到的问题是数组中的最高值被随机垃圾负值替换。我无法找到问题所在。这是该程序的完整源代码 -

#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。

提前致谢

1 个答案:

答案 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)。