2017-04-16 2 views
-2

이 프로그램을 사용하여 숫자 목록을 정렬했습니다. 선생님이 선별하는 것으로되어 있지만, 선생님이 선생님이 버블 정렬과 비슷한 방식으로 작동한다고 말하면서 고쳐야합니다. 변경해야 할 부분에 대한 제안 사항은 무엇입니까?선택 정렬 대 버블 정렬 C++

#include <iostream> 

using namespace std; 

void printArr(const int a[], int s); 
void swapVals(int& v1, int& v2); 
void sortArr(int a[], int s); 

int main() 
{ 
    const int s = 20; 
    int arr[s] = {8, 38, 25, 4, 47, 47, 38, 36, 3, 33, 2, 19, 16, 30, 5, 47, 16, 
        38, 13, 1 
       }; 

    cout << "Unsorted array:\n"; 
    printArr(arr, s); 
    cout << "\n\n"; 

    sortArr(arr, s); 

    cout << "Sorted Array:\n"; 
    printArr(arr, s); 
    cout << "\n"; 

    return 0; 
} 

void sortArr(int a[], int s) 
{ 
    for (int i = 0; i < s-1; i++) 
    { 
     int index = i; 
     for (int j = i + 1; j < s; j++) 
      if (a[j] < a[index]) 
       index = j; 
     swapVals(a[index], a[i]); 
    } 
} 

void swapVals(int& v1, int& v2) 
{ 
    int temp = v1; 
    v1 = v2; 
    v2 = temp; 
} 

void printArr(const int a[], int s) 
{ 
    for (int i=0; i<s; i++) 
    { 
     cout << a[i]; 
     if (i != s-1) 
      cout << " "; 
    } 
} 
+0

https://en.wikipedia.org/wiki/Selection_sort의 알고리즘 코드 예 - 구현에 'iMin! = j' ('index! = i')에 대한 테스트가 있습니다. 그렇지 않으면 똑같아. 도움을 줄 다른 사람들을위한 코드를 제시 할 때'FindMIn()'과 같이 불필요한 코드를 사용하지 않아도됩니다. 아마도 선생님은 일관성없는 들여 쓰기로 혼란스러워 할 것입니다. 즉, 당신을 위해 그것을 고쳤습니다. (그리고 그냥 findMin()을 제거했습니다. – Clifford

+0

형식을 명확하게 지정하고 이해가 가능함을 나타내는 주석을 추가하여 웹에서 복사 한 다음, 값 자체를 바꾸어서 다시 제출하지 않도록 점검을 추가하십시오. 선택 정렬 구현이지만 명확하지 않을 수 있습니다 . 또한 단일 명령문 코드 블록 주위의 중괄호를 사용하는 것이 좋습니다. 훨씬 명확합니다. 특히 들여 쓰기가 자신의 것과 들쭉날쭉하지 않은 경우 특히 그렇습니다. – Clifford

+0

여기 약간의 도움이 될 수 있습니다. (http://www.cs.csubak.edu/~msarr/visualizations/ComparisonSort.html) – Tyger

답변

0

내가 선택한 정렬이라고 생각합니다. 코드를 작성하는 방식으로 사람들이 쉽게 오해 할 수 있습니다.

변경해야 할 부분은 sortArr 함수, 내부 루프, "i + 1부터 시작하는 분의 색인 찾기"를 추가하는 것이 좋습니다. 당신이 정의한 findMin. 호출 루틴에서 : mainArray sortArr, sortArr은 스왑 호출 만하고 findMin을 호출하지 않습니다. 이것은 거품 정렬과 같습니다.

또한 findMin은 좋지 않습니다. min 값의 인덱스가 아니라 min 값을 찾는 것입니다.

+0

사과 - 원래 질문에서 사용하지 않은'findMin()'을 삭제했습니다 - 나는 당신이 대답에서 그것을 참조 할 것이라는 것을 몰랐습니다. 어떤 경우에도 불필요한데,'swapVals()'가 호출 될 때,'index'는 최소값에 대한 인덱스입니다. Wikipedia의 예제 코드와 거의 동일하고 다른 변수 이름을 사용하고 값을 자체와 바꾸기위한 검사는 없습니다. – Clifford

+0

내가 말했듯이 선생님에게 명확하지 않은 선별 유형이라고 생각합니다. 문제가 발생할 수 있습니다. 이것은 실제로 프로그래밍 문제가 아닐 수도 있습니다. –

+0

그것은 내 질문이 아닙니다. 그것은 단지 내 편집이었습니다. 수업은 아마도 형식이 잘못된 주석 자유 코드를 제출하여 선생님에게 힘든 시간을주지 않는 것이 좋습니다. – Clifford