2017-09-09 3 views
0

저는 C에서 꽤 초보자입니다. 내 교수의 방식에서 버블 정렬을 수정하는 방법에 대한 구체적인 숙제를 따르려고합니다. 원한다.무작위 배수 배열에 대해 매우 구체적인 방법으로 버블 정렬을 수정하려고 시도합니다.

기본적으로 우리는 무작위 값을 가진 double 배열을 만든 다음 여러 정렬 방법을 사용하여 해당 배열을 새로운 배열로 복사하고 정렬합니다.

배열과 임의의 숫자가 정상적으로 표시되었지만이 버블 정렬을 올바르게 수정했는지 알 수 없습니다. 과제의 지침 상태는 다음과 같습니다.

수정 된 버블 정렬에는 내부 및 외부 루프가 포함됩니다. N 정렬되는 배열의 요소의 개수가 1 - 외부 루프 내지 N 0 행 (협의 I)는 카운터/인덱스를 증분 . 내부 루프는 I + 1N내지 그 카운터/인덱스를 증가, 내가의 범위에서 최소의 요소를 식별 의 배열 요소에 대해 그 범위의 각 요소를 테스트한다. 이 내부 루프가 종료 한 후, 여전히 동안 외부 루프에서, 만약 위치 I, I에서 해당 위치의 값이 값으로 교체된다 발견은 그렇지 않으면 작업에서보다 작은 소자 필요한 경우 외부 루프가 반복됩니다.

for (i = 0; i < n - 1; i++) 
{ 
    for (j = i + 1; j < n; j++) 
    { 
     if (arrayB[j] < arrayB[i]) 
     { 
      value = arrayB[i]; 
      arrayB[i] = arrayB[j]; 
      arrayB[j] = value; 
     }        
    } 
} 

이 코드가 올바르게 배열을 정렬,하지만 그건 경우 그냥 보통의 거품 정렬 또는 내가 있기 때문에 이야기하는 방법을 모른다 :

은 버블 정렬 내 코드입니다 내가 예상했던 방식대로 수정 했어. 버블 형식이 일반적으로 C 언어로 어떻게 보이는지 모르겠으므로 수정 된 버전인지 아닌지 알 수 없습니다.

나는이가 NOT C++ 코드를하지만, 어떤 도움을 주시면 더 좋구요 보통 오래된 C.

있어야하는데 명확히하고 싶습니다!

+0

코드의 버블 정렬과 같은 설명은 선택 분류와 비슷합니다. –

답변

0

설명에 따르면 selection sort이 필요하다고 생각합니다.

버블 정렬의 경우와 달리 순서가 바뀐 숫자 쌍이 마주 치는 순간 스와핑이 발생하면 스와핑은 외부 루프의 반복을 위해 한 번만 수행됩니다.

arrayB[i]보다 작은 값의 인덱스를 저장하려면 smallIndex과 같은 변수가 필요합니다. smallIndex 값이 필요한 경우 내부 루프를 입력하기 전에이 변수에 값 i을 입력하십시오.

내부 루프 밖으로 그러나, 외부 루프의 현재 반복이 종료되기 전에 들어오는, smallIndex 여전히 i인지 확인되지하다면 arrayB[i]arrayB[smallIndex] 스왑.

for (i = 0; i < n - 1; i++) 
{ 
    smallIndex = i; 
    for (j = i + 1; j < n; j++) 
    { 
     if (arrayB[j] < arrayB[smallIndex]) 
     { 
      smallIndex=j; 
     } 
    } 
    if(smallIndex!=i) 
    { 
     value = arrayB[i]; 
     arrayB[i] = arrayB[smallIndex]; 
     arrayB[bigIndex] = value; 
    } 
} 
+1

대단히 감사합니다. 매우 도움이되었습니다. –

0

귀하의 코드는 보통 거품 정렬처럼 당신이 내부 루프에서 스왑을하고 있기 때문에

코드 일 수있다.

내부 루프가 완료된 후 지침을 교환한다고 가정합니다. 내부 루프는 단지 i to n 범위에서 가장 작은 요소를 찾는다. 그런 다음 내부 루프가 완료된 후 해당 요소를 i으로 바꿉니다.