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시간 넘음
ㅄ같은데 스스로 해볼려고 이래 고민했음
알려줘 부탁이야
댓글 0