2010-02-06 5 views
3

그래서 여기 내가 지금까지이 작업은 다음과 같습니다 C++에서 포인터로 버블 정렬을 어떻게 사용합니까?

void sortArray(int amountOfScores, int* testScores) 
{ 
    for(int i = 0; i < amountOfScores; i++) 
    { 
     for(int j = 0; j < amountOfScores-1; j++) 
     { 
      if(*(testScores+i) > *(testScores+j+1)) 
      { 
       int temp = *(testScores+j); 
       *(testScores+j) = *(testScores+j+1); 
       *(testScores+j+1) = temp; 
      } 
     } 
    }  
    for(int i = 0; i < amountOfScores; i++) 
    { 
     cout << *(testScores+i) << endl; 
    } 
} 

는 기본적으로 나는 사용자가 입력하고자하지만 많은 숫자를 읽을려고, 다음 오름차순으로 정렬. catch는 포인터를 사용해야하고 실제로는 이해하지 못했습니다. 위의 코드는 3 개의 숫자에 대해 작동하지만 더 이상 추가하면 정렬하지 못합니다. 최선의 방법으로 문제를 해결하려고했지만 포인터에 대한 지식이 없어도 찾고있는 것을 알 수 없습니다.

도움 주셔서 감사합니다.

+0

int * 포인터를 사용하여 정렬하려는 경우 testScores가 int에 대한 포인터로 선언 된 다음 int **를 정렬 함수에 전달해야합니다. 'int ** testScores' 또는'int * testScores []'중 하나입니다. 두 번째 형식은 더 명확합니다. –

+0

하나의 조언 : 포인터에 대한 자습서와 배열 및 배열과 함께 사용하는 방법을 읽어보십시오. 그것은 당신의 인생을 더 쉽게 만들 것입니다! –

+0

이 숙제가 있습니까? 그렇다면 '숙제'태그로 태그를 지정하십시오. 그렇지 않다면 왜 거품 정렬을 사용합니까? –

답변

3

당신의 문제는 여기에 있습니다

 if(*(testScores+j) > *(testScores+j+1)) 

이 (내가 J으로 대체 참고) :

if(*(testScores+i) > *(testScores+j+1)) 

는 다음과 같은 의미입니까?.

btw, 버블 정렬에서 스왑이없는 경우 중단해야합니다. 어떤 경우에는 속도가 빨라집니다.

+0

나는 이것이 숙제를 위해서이기를 바란다. – joejoeson

+0

그래, 그래서 나는 내 머리를 내 책상에 쳤다. 사실 나는 j와 i가 아니라, 그저 바보 같은 단순한 것이라고 생각했다. 신선한 눈을 가져 주셔서 감사합니다! – Jeff

+0

@ Jeff : 예, 포인터 사용이 문제가없는 것처럼 보입니다. 타이핑 기술에만 개선이 필요합니다. –

1

버블 정렬은 배열이나 링크 된 목록 (포인터)을 말하는 경우에도 동일하게 작동합니다.

배열에서 인접한 두 항목의 위치를 ​​바꾸는 대신 인접한 두 목록 요소 사이에서 포인터 값을 서로 바꿔야한다는 것입니다.

알고리즘은 동일합니다.

+0

OP의 질문이나 코드에서 아무도 그가 연결된 목록을 다루고 있음을 나타냅니다. – sepp2k

+0

당신의 반응은 그의 코드를 볼만큼 충분히주의를 기울 였다고 가정합니다. 불량 /. 버릇. – joejoeson

관련 문제