2017-06-20 28 views
0

以下代码是为排序数组编写的。
这里程序给出了意想不到的输出结果。
错误应该在10-19行。试图创建排序程序,但未按预期工作

#include<stdio.h> //Sorting array program 
int main() 
{ 
    int arr[20],i,j,n,temp; 
    printf("Enter number of elements : "); 
    scanf("%d",&n); 
    printf("\nEnter the elements of the array : "); 
    for (i=0;i<n;i++) 
     scanf("%d",&arr[i]); 
    for(i=0;i<n;i++) 
    { 
     for(j=0;j<arr[i];j++) 
      if (arr[i+1]<arr[i]) 
      { 
       temp=arr[i]; 
       arr[i]=arr[i+1]; 
       arr[i+1]=temp; 
      } 
    } 
    printf("\nThe sorted list is : \n"); 
    for (i=0;i<n;i++) 
     printf("\n arr[%d] : %d",i,arr[i]); 
    return 0; 
} 

输出:: 输入要素数:4

 Enter the elements of the array : 5 
    3 
    2 
    1 

    The sorted list is : 

     arr[0] : 3 
     arr[1] : 2 
     arr[2] : 1 
     arr[3] : -16777216 
     Process returned 0 (0x0) execution time : 8.161 s 
     Press ENTER to continue. 
+0

闻起来像一个“索引越界”的错误。 –

+0

这是哪种排序算法?我对内循环有怀疑。 – Gaurav

+1

回答

0

修改你的程序很喜欢这一点,你会发现发生了什么:

#include <stdio.h> //Sorting array program 
#include <assert.h> 

int main() 
{ 
    int arr[20], i, j, n, temp; 
    printf("Enter number of elements : "); 
    scanf("%d", &n); 
    printf("\nEnter the elements of the array : "); 

    for (i = 0; i<n; i++) 
    scanf("%d", &arr[i]); 

    for (i = 0; i<n; i++) 
    {          // <<< line added 
    for (j = 0; j < arr[i]; j++) 
    { 
     assert(j < n);      // <<< line added 
     assert(i + 1 < n);     // <<< line added 

     if (arr[i + 1] < arr[i]) 
     { 
     temp = arr[i]; 
     arr[i] = arr[i + 1]; 
     arr[i + 1] = temp; 
     } 
    }          // <<< line added 
    } 

    printf("\nThe sorted list is : \n"); 

    for (i = 0; i<n; i++) 
    printf("\n arr[%d] : %d", i, arr[i]); 

    return 0; 
} 

阅读asserthere

但无论如何,该算法看起来腥,我反正:

这条线路是特别可疑:

for (j = 0; j < arr[i]; j++) 
+0

0:main:声明'i + 1 Shushrut

+0

@Shushrut确切地说,这就是要点:您正在访问数组中最后一个元素之外的一个元素。 –

0

试试这个

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h> //Sorting array program 

int main() 
{ 
    int arr[20], i, j, n, temp; 

    printf("Enter number of elements : "); 
    scanf("%d", &n); 
    printf("\nEnter the elements of the array : "); 
    for (i = 0; i<n; i++) 
     scanf("%d", &arr[i]); 

    for (i = 0; i<n; i++) 
    { 
     for (j = 0; j<n; j++) 
      if (arr[i]<arr[j]) 
      { 
       temp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = temp; 
      } 
    } 
    printf("\nThe sorted list is : \n"); 
     for (i = 0; i<n; i++) 
     printf("\n arr[%d] : %d", i, arr[i]); 
    printf("\n"); 

    return 0; 
}