2014-12-02 5 views
-2
void sort(int* A,int l) 
{ 
    int j; 
    int B[l]; 
    for(int i=0;i<l;i++) 
    { 
     j = largest(A,l); 
     B[l-i-1] = A[j]; 
     A[j] = -1; 
    } 
    A = B; 
} 
    int main() 
    { 
    . 
    int C[3] = {x,y,z}; 
    ... 
    sort(C,3); 
    cout<<C[0]<<C[1]; 
    } 

출력 -1-1 가 될오고 제대로 할당하지만,하지 우리가 할당하는 경우 A [0] = B [0] 등등, 우리는 정답을 얻고있다. 추신 : * A = * B를 사용해 보았습니다.이 요소는 첫 번째 요소 만 수정하려고합니다.배열은

+0

당신은 배열'INT의 B [1]를 초기화 할 필요가;'. 보십시오'int B [l] = {};' – Himanshu

+0

@Himanshu 정말입니까? –

+2

'A = B'는 여기에 아무 것도하지 않습니다. 두 변수는 함수에서 복귀 한 후에 범위를 벗어납니다. 'B'의 내용을 루프 나'std :: copy'로'A '에 복사해야합니다. –

답변

1

A = B을 할당하면 배열의 첫 번째 요소에 대한 포인터를 보유하는 로컬 변수를 다시 할당합니다. 이 과제는 main에서 아무 것도 변경하지 않습니다. 특히 A의 내용에는 영향을주지 않습니다.

당신이 당신의 정렬을 완료 한 후에는 AB의 모든 요소를 ​​복사해야합니다

void sort(int *A, int l) 
{ 
    int j; 
    int B[l]; 

    // sort into temporary array B  
    for (int i = 0; i < l; i++) { 
     j = largest(A, l); 
     B[l - i - 1] = A[j]; 
     A[j] = -1; 
    } 

    // copy temporary array B to result array A 
    for (int i = 0; i < l; i++) A[i] = B[i]; 
} 

을 그러나 당신이 그것을 보면 아몰 Bavannavar은 기본적으로 옳았다 : 당신은 전체를 검사 할 필요가 없습니다 매회 가장 큰 요소에 대한 배열. 나머지 요소를 확인하는 것으로 충분합니다. 따라서 "사용 된"요소에 낮은 값을 할당하는 대신 가장 큰 요소를 끝으로 바꿀 수 있습니다. 그렇게하면 처리 된 요소가 끝에 있고 처리되지 않은 요소는 처음에 있다는 것을 알 수 있습니다. 그런 다음 임시 배열의 필요없이 장소에 정렬을 수행 할 수 있습니다

void sort2(int *A, int l) 
{ 
    while (l) { 
     int j = largest(A, l--); 
     int swap = A[j]; A[j] = A[l]; A[l] = swap; 
    } 
} 
+0

정렬이나 코드에 대해 신경을 쓰지 않았습니다. 할당하는 것에 대해 알고 싶었습니다. A = B, 감사합니다. – Glaedr

0

귀하의 예제 코드의 많은 잘못된 사용은 예를 들어, 다음과 같습니다

int B[l]; 

는 할 수없는, 당신이 경우 내가 일정한 가치를 가져야 만한다.

A = B; 

은 딥 복사본 대신 얕은 복사본을 수행합니다. 당신은 여기 디퍼 런스 세라마이드를 볼 수 있습니다 What is the difference between a deep copy and a shallow copy?

cout<<C[0]<<C[1]; 

는 숫자가 구문 분석하지 않고 함께 결합 인쇄됩니다. 당신이 할 수있는 방향으로 목표로 할 수있는이 코드 하나의 구현을 해결하는 방법에 관해서는

:

#include <iostream> 

using namespace std; 

int largest(int* A, int l) 
{ 
int big=-1; 
int i; 
int index=0; 
for(i=0;i<l;i++) 
{ 
    if(A[i]>big) 
    { 
     big=A[i]; 
     index=i; 
    } 
} 
return index; 
} 

void sort(int* A,int l) 
{ 
int j; 
int *B=new int[l]; 
for(int i=0;i<l;i++) 
{ 
    j = largest(A,l); 
    B[l-i-1] = A[j]; 
    A[j] = -1; 
} 
for(int i=0;i<l;i++) 
{ 
    A[i]=B[i]; 
} 
} 
int main() 
{ 
int C[3] = {2,5,1}; 
sort(C,3); 
cout<<C[0]<<" "<<C[1]; 
return 1; 
} 
+0

int B [l]가 작동합니다. – Glaedr