2014-01-31 21 views
0

我正面臨一個問題,即數組中的最高值正在被隨機垃圾負值替換。我無法找到問題。這裏是該程序的完整源代碼 -在氣泡排序中獲得最大值的垃圾值C

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

在此先感謝

+3

''''''是'9'時,'num [i + 1]'出界了,因爲u循環從0到9 –

+0

在gcc中,它編譯和運行正常 –

+0

@SakthiKumar這是答案,但是你應該將它形成爲OP接受它的答案。 – ThunderGr

回答

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]交換 - 所以現在該數組有一個垃圾值,並且您剛剛重寫的數組不是數組的一部分。

解決方案:將i < 10更改爲i < 9。只有9對要檢查的元素(0/1,1/2,2/3,...,8/9)。

+0

感謝您的答案。該程序現在工作正常^ _ ^。 –