2014-10-20 4 views
0

저는 C++을 처음 접했을 때, insert_sort 함수의 출력을 주 함수로 전달하려고합니다. 이것은 내가 삽입 정렬 알고리즘은 여기서 중요하지 않습니다C++에서 배열 전달하기

candidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the 
     address of the argument with & 
int* insertion_sort(int* arr); 

입니다 무엇을 얻을 내 코드

#include "include.h" 

using namespace std; 

int main() 
{ 
    int arr[10] = {12,9,32,1,0,5,13,7,4,2}; 


    for (int i = 0; i < 10 ; ++i) 
    { 
     cout << insertion_sort(arr[i]) << endl; 
    } 
    return EXIT_SUCCESS; 
} 

int* insertion_sort(int* arr){ 
    int key, temp =0; 

    for (int i = 0; i < 10; ++i) 
    { 
     key = i+1; 
     while(key >= 0){ 
      if (arr[key] < arr[key -1]) 
      { 
       temp = arr[key -1]; 
       arr[key -1] = arr[key]; 
       arr[key] = temp; 
      } 
      key--; 

     } 
    } 
    return arr; 

} 

입니다. 배열 포인터가 함수에 전달되지 않는 이유를 모르겠습니다.

+1

글쎄, 당신은 여기에'int'를 전달하고 있습니다 : 함수가 int에 대한 포인터를 기대하면서'cout << insertion_sort (arr [i]) << endl; 아마 전체 배열을 전달하기위한 것입니다 : 1) 루프를 제거하십시오. 2)'insertion_sort (arr)'로 호출합니다. 배열의 길이를 다른 매개 변수로 전달할 수도 있습니다. –

답변

1

많은 것을 여기에서 일어나고 있습니다

편곡 [내가] 정수 (int 타입)입니다. int * 형식의 arr을 전달해야합니다.

귀하의 insertion_sort 함수는 입력 배열을 제자리에서 수정하여 반환 값을 필요로하지 않는 것 같습니다.

또한 삽입 정렬을 10 번 호출해서는 안됩니다. insertion_sort를 호출 한 다음 for 루프를 사용하여 정렬 된 배열을 인쇄하십시오. 너무 많은 변화없이

:

#include <iostream> 

using namespace std; 

void insertion_sort(int* arr){ 
    int key, temp =0; 

    for (int i = 0; i < 10; ++i) 
    { 
     key = i+1; 
     while(key >= 0){ 
      if (arr[key] < arr[key -1]) 
      { 
       temp = arr[key -1]; 
       arr[key -1] = arr[key]; 
       arr[key] = temp; 
      } 
      key--; 

     } 
    } 

} 

int main() 
{ 
    int arr[10] = {12,9,32,1,0,5,13,7,4,2}; 

    insertion_sort(arr); 

    for (int i = 0; i < 10 ; i++) 
    { 
     cout << arr[i] << endl; 
    } 
    return 0; 
} 
0

나는 당신의 질문에 대답을 고수거야, 그리고 내가 주위에 당신의 플레이를하자 자신에 나머지를 알아낼 수 있습니다.

함수 서명은 입니다. int * insertion_sort (int * arr) 이는 int에 대한 포인터를 예상하고 int에 대한 포인터를 반환한다는 것을 의미합니다.

그러나 arr [i]은 int이며 int가 아닌 포인터입니다.

시도 & arr [i].

해피 코딩! :)