삽입 정렬을 어떻게 수행 할 수 있지만 요소뿐만 아니라 배열에서 요소의 속성을 점검 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/789773

문제

죄송합니다. 이것이 간단하다고 확신하지만 피곤해서 알아낼 수 없습니다.

나는 요소의 배열을 가지고 있으며, 각 요소는 실제로 입자가 포함되는 데이터 구조 (c의 구조물) 인 입자입니다. 요소 자체뿐만 아니라 요소 X 위치를 비교하고 싶습니다.

보고 위키 백과의 의사 코드, 나는 내가 원하는 속성을 비교하기 위해 그것을 수정하려고 시도했지만 나는 무언가 (아마도 단순한) 잘못한 것을했다고 생각합니다.

내가 수정 한 내용은 다음과 같습니다.

for (i = 1; i<length; i++) {
    value = particles[i].position.x;    
    j = i - 1;
    while (j >= 0 && particles[j].position.x > value) {
        particles[j+1] = particles[j];
        j = j - 1;
    }
    particles[j+1] = particles[i];
}

누군가가 내 실수를 지적 할 수 있다면 그것은 좋을 것입니다!

아담

도움이 되었습니까?

해결책

두 번째 라인은 ITH 요소의 임시 사본을 저장하기 위해 작동합니다. 그러나 두 번째 마지막 라인에서는 덮어 쓰기 값에서 읽고 있습니다. 코드를 다음과 함께 변경하면 작동해야합니다 (주석 변경) :

for (i = 1; i<length; i++) {
    value = particles[i]; // store particles[i] rather than it's x coordinate
    j = i - 1;
    while (j >= 0 && particles[j].position.x > value.position.x) { // changed
        particles[j+1] = particles[j];
        j = j - 1;
    }
    particles[j+1] = value; // copy from temporary
}

다른 팁

X 좌표 값이 아닌 입자 물체를 교환해야합니다. 노력하다:

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top