2013-12-13 3 views
0

제 실수를 말해주세요 배열을 정렬하려면 거품 정렬 방법을 사용하고 있습니다. 포인터를 사용하여 plz를 수정하고 실수를 수정하고 싶습니다. 내 실수는 정렬 조건에 있다고 생각합니다.포인터를 통해 정렬

#include <iostream> 
using namespace std; 

int main() { 

    //sorting 

    int arr[5]; 

    int *ptr; 
    ptr = arr; 
    int temp; 

    for (int i = 0; i < 5; i++) { 
    cin >> *(ptr+i); 
    } 


    for (int i = 0; i<5;i++) { 
    for (int z = 0; z<4; z++) { 
     if (*(ptr+1) < *ptr) { 
     temp = *ptr; 
     *ptr = *(ptr+1); 
     *(ptr+1) = temp; 
     } 
     *(ptr++); 
    } 
    } 

    for (int i = 0; i < 5; i++) { 
    cout << *(ptr+i) << endl; 
    } 
    return 0; 
} 
+2

프로그램을 디버그하려고 했습니까? –

+2

지금 삭제 된 답변에서 말한 것처럼'* (ptr ++)'는'ptr ++'이어야합니다. 'ptr'가 한 끝을 가리킬 때 차이가 생길 것이며 여러분은 그것을 역 참조하려고합니다. – chris

+0

또한 ptr을 사용했지만 여전히 오류가 발생했습니다. – user3100177

답변

1

배열을 오름차순으로 정렬한다고 가정합니다. 그 일을 할 때, 당신은 잘못 몇 가지 일을하고있다 :

  1. 당신이가는 요리는 swaping * PTR 및 * (PTR + 1) ->이 방정식 또는 증가하지 않습니다 포인터에 Z를 추가해야합니다.
  2. 는 첫 번째 반복 후에는 마지막 위치에 배열에서 가장 큰 요소가, 이제 당신은 단지 코드가 엷게 같이한다 comparisions

와 마지막 위치 전에 중지해야합니다

for (int i = 0; i<5;i++) { 
    for (int z = 0; z<4-i; z++) { 
     if (*(ptr+z+1) < *(ptr+z)) { 
     temp = *(ptr+z); 
     *(ptr+z) = *(ptr+z+1); 
     *(ptr+z+1) = temp; 
     }  
    } 
    } 
+0

고마워, 논리, – user3100177

3

"Z" PTR = 편곡으로 다시 설정하여 루프 후 포인터 PTR을 다시;

+0

고쳤다 출력 오름차순으로 제공하지 않습니다 – user3100177

+0

그래서 당신은 그것을 오름차순으로 갈 것이라고 생각합니까? –

+0

정렬 루프가 완료되었을 때를 가리키는'ptr '은 무엇입니까? –

관련 문제