【함정】정렬 중 동작을 교환하는 함정

3064 단어 정렬
static void swap(int[] data, int i, int j) {



        // ,data[i] data[j] 0

        if (data[i] != data[j]) {

            data[i] = data[i] ^ data[j];

            data[j] = data[i] ^ data[j];

            data[i] = data[i] ^ data[j];

        }

    }



    static void sort(int[] data, int begin, int end) {

        if (begin < end) {

            int cur = data[begin];

            int i = begin;

            int j = end + 1;

            while (true) {

                while (i < end && cur >= data[++i])

                    ;

                while (j > begin && cur <= data[--j])

                    ;

                if (i < j) {

                    swap(data, i, j);

                } else {

                    break;

                }

            }



            swap(data, begin, j);

            sort(data, begin, j - 1);

            sort(data, j + 1, end);

        }

    }



    public static void main(String[] args) {

        int[] data = { 2, 1, 3, 8, 4, 9 };

        sort(data, 0, 5);

        System.out.println(Arrays.toString(data));

    }

상술한 예에서 3^3의 상황이 발생하였는데, 마지막에 0을 얻어 순서가 잘못되었다.
이차 또는 연산으로 수조 원소를 교환할 때 연개 원소의 값이 같은지 비교하는 것을 기억해라.

좋은 웹페이지 즐겨찾기