2017-05-04 2 views
0

내 구현 J < N-2 또는 N-1 또는 n의 경우에는 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?내 선택 정렬에 어떤 문제가 있습니까? 선택 정렬의

제어 루프를 감시 할 수있는 온라인 IDE가 있습니까?

#include <stdio.h> 
#define n 4 
int main(void) { 
    int a[n]={4,3,2,1}; 
    int j,min; 
    for(int i=0;i<n;i++){ 
     min=i; 
     for(j=i+1;j<n-3;j++) 
      if(a[j]>a[j+1]) 
       min=j+1; 
     if(min!=i){ 
      int t=a[min]; 
      a[min]=a[i]; 
      a[i]=a[t]; 
     } 
    } 

    for(int i=0;i<n;i++) 
     printf("%d",a[i]); 
    return 0; 
} 

I tried it here

+0

질문에 언어 (예 :'c')를 태그 할 수 있습니까? – trincot

답변

0

코드는 실제로 n-3에 이상한 제한이뿐만 아니라 다른 결함이 있습니다 (a[min]를)

  • 현재 최소 비교해야 최소 찾으려면을 , 배열의 다음/이전 요소가 아닙니다.
  • 스왑하려는 코드가 올바르지 않습니다. 마지막 할당은 a[t]이 아니고이 아니어야합니다.그 자체.

    int main(void) { 
        int a[n]={4,3,2,1}; 
        int j,min; 
        for(int i=0;i<n;i++){ 
         min=i; 
         for(j=i+1;j<n;j++) 
          if(a[min]>a[j]) 
           min=j; 
         if(min!=i){ 
          int t=a[min]; 
          a[min]=a[i]; 
          a[i]=t; 
         } 
        } 
    
        for(int i=0;i<n;i++) 
         printf("%d",a[i]); 
        return 0; 
    } 
    

    https://ideone.com/AGJDPS

    NB : 왜 안 루프 내에서 의 printf 호출을 추가, 온라인 IDE에서 중간 결과를 볼 수

  • 여기

는 수정 된 코드? 물론 더 큰 코드 프로젝트의 경우 모든 디버깅 기능이있는 로컬에 설치된 IDE를 사용하고 코드를 단계별로 실행하는 것이 좋습니다.

+0

제 질문으로 N-3이 필요한 이유가 무엇입니까? 무슨 뜻이에요? –

+0

필요하지 않습니다. 그건 잘못 됐어. – trincot

+0

그러면 올바른 해결책은 무엇입니까? –

관련 문제