2013-05-15 3 views
0

저는 의사 코드 FOR 루프를 꽤 얻지 못했습니다.이 의사 코드에 대한 올바른 코드는 무엇입니까

이 의사 코드의 올바른 코드는 무엇입니까? 여기

function myFunction(arr[]) 
    for i = 0 to length(arr) 
     if (arr[i] > i) then 
      j = i 
      while (j < length(arr)) and (arr[j] >= j) 
       j = j + 1 
      temp = arr[i] 
      arr[i] = arr[j] 
      arr[j] = temp 
      i = 0 
+0

왜 그런 질문을합니까? – desperateCoder

+0

C 스타일 구문을 사용하는 언어의 코드는 매우 유사합니다. 왜 의사 코드가하는 일인지 물어 보지 않으시겠습니까? 동안이 경우 (전 길이 (편곡)을 <) : 이 될 수 있습니다 : 나에게이 여기에 옵션이이기 때문에 –

+0

는 아니면 할 수 있습니다에 대한 는 (i ++; 내가 길이 (편곡)를 i) i = 0; else i ++; – orsi

답변

0

는 C#으로,이다 (당신이 "길이"decapitalize 경우, Java 또는) :

void myFunction(int[] arr) 
{ 
    for(int i = 0; i < arr.Length; i++) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i = 0; 
     } 
    } 
} 

동안 사용 대신에 :

void myFunction(int[] arr) 
{ 
    int i = 0; 
    while(i < arr.Length) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i = 0; 
     } 
     i++; 
    } 
} 

주의 들여 쓰기 구조 의사 코드 :

function myFunction(arr[]) 
    for i = 0 to length(arr) 
     if (arr[i] > i) then 
      ... 

for 선언문 아래의 모든 것이 루프 안에 있고 if를 0으로 설정하는 것을 포함하여 if 아래의 모든 것이 조건부 블록 안에 있음을 의미합니다. 이 사실을 감안할 때 if 문을 입력하면 1에서 다시 시작해야합니다. 코드가 아래와 같은 경우 어떻게됩니까?

void myFunction(int[] arr) 
{ 
    int i = 0; 
    while(i < arr.Length) 
    { 
     if(arr[i] > i) 
     { 
      int j = i; 
      while(j < arr.Length && arr[j] >= j) 
       j = j + 1; 
      int temp = arr[i]; 
      arr[i] = arr[j]; 
      arr[j] = temp; 
      i++; 
      i = 0; 
     } 
    } 
} 

경우에는 arr[i] <= i에서 루프가 종료되지 않습니다.

명시 적으로 달리 명시하지 않는 한 항상 반복 루프의 마지막 연산이 인덱스의 이동이라고 가정해야합니다. 이것은 for 회 돌이가 어떻게 동작해야하며, 얼마 동안 구현되어야하는지 (규칙에 따라)입니다.

코드 자체는 bubble sort 구현에서 시도한 것으로 보이지만 다른 요소보다는 색인과의 비교를 기준으로 정렬됩니다. 내가 성취하려고하는 것이 무엇인지 확신 할 수 없다.

+0

이 변형에서 arr [i]> i -가 true이면 다음 반복이 i = 1에서 시작되며 0이 아닌가요? 의사 코드는 그 경우 0부터 시작해야한다고 말하지 않습니까? – orsi

+0

@orsi 문제는 맞지만 의사 코드가 의미하는 바는 아닙니다. 달리 명시하지 않는 한, 루프 색인 증분 (for 또는 while/i ++로 완료되었는지 여부)이 루프 본문의 마지막 조작이라고 가정해야합니다. 이것은 for 루프가 (당신이 말했듯이) 동작해야하고 while은 같은 규칙을 따라야 만하는 방법입니다. 코드에서 i를 0으로 설정했다면 증분 앞에 i = -1을 할당하지 않는 이유는 무엇입니까? 또한 정렬을 위해 0에서 다시 시작할 필요가 없습니다. –

+0

글쎄, 그것은 알고리즘을 분류하는 것이 아니라 뇌 맛보기와 비슷합니다. 그게 내가 이해하려고 노력하는거야 -이 코드는 내가 반복의 끝에 0이되어야한다고 명시 적으로 말하며, 아니면 새로운 것으로 시작할 때 증가 할 것이라고 가정한다. – orsi

관련 문제