package project_0523;


public class Sort implements ISort {

private int pivot;  

private int left; //배열의 왼쪽

private int right; //배열의 오른쪽

private int temp; //배열의 값들을 바꿀때 사용하는 속성

public void upsort(int[] arr, int i, int j) {//upsort시작

if(i < j){

pivot = j; //pivot 값을 배열의 맨끝으로 지정

left = i; //left의 값 지정 >> 배열의 맨 왼쪽

right = pivot-1; //right의 값 지정 >> 배열의 맨 오른쪽(피벗을 제외한)

while (left < right){//while문 시작

while (arr[left] < arr[pivot])

left++;

while (arr[right] > arr[pivot] && left < right)

right--;

if(arr[left] > arr[right]){

temp = arr[left];

arr[left] = arr[right];

arr[right] = temp;

}

}//while문 끝

temp = arr[pivot];

arr[pivot] = arr[right];

arr[right] = temp;

for (int k =0; k < arr.length; k++)

System.out.println(arr[k]);

System.out.println("===============");


//ㅅㅂ같은 재귀부분

upsort(arr, i, right-1);

upsort(arr, right+1, j);

}


}//upsort끝



이런식인데


진짜 스스로 엄청 생각해도 안되서 올리는거니까 좀 알려줘라


다른 소스코드들은 피벗이 열 가운데에 있던데 나는 맨 오른쪽으로 하고싶어서 그랫고


종이에 써가면서 쭉 해봣는데


피벗값이랑 right값이랑 바뀌는 지점

즉 left랑 right의 위치가 곂치거나 교차되는 지점에서 피벗이랑 RIGHT값이랑 바꿧는데


이것도 다른 코드들은  LEFT값이랑 바꾸더라고


LEFT랑 바꾸는거와 RIGHT와 바꾸는거랑 차이가 있는지 잘 모르겠는데 결과값은 달라져

왜그런거야?


그리고 가장 문제는 저 밑에있는 재귀부분인데

저 부분에서 엉켜서 안되는거같아


누구는 재귀부분에  내가한 right 대신 left로 하던데


손으로 쓰면서 내려가다 보면 저부분에서는


left 값과 right값이 같은 값을 가지고 있는데 왜 서로 결과값 차이가 날까


진짜 소스 병신같은건 알고있는데 정답을 알려줘


부탁이야 진짜 이거 엄청많이 고민함


10시간 넘음


ㅄ같은데 스스로 해볼려고 이래 고민했음


알려줘 부탁이야