package class05;
public class Test02 {
//퀵정렬
static void quick_sort(int[] data,int start,int end) {
if(start>=end) { //만약에(정렬할 배열 요소가 없다면)
return; // 3.반환값을 나를 호출한 위치로 전달 , 2.함수 즉시 종료
}
int pivot=data[start];
int L=start+1;
int H=end;
while(true) { // 얼마만에 교환될지 모르기 때문에 무한루프
while(pivot>data[L]) {
if(L==end) { //L가 끝까지 도달했다면,
break; // 그만해라.
}
L++; // ※ index 범위를 ++,--때에는 Exception에 유의하자! Exception에 유의하자!!
}
//ex ) [10 1 2 3 4 5 6 7 8 9] 피봇이 제일 큰 상태일 수도 있다.
while(pivot<data[H]) {
if(H==start) {
break;
}
H--;
}
System.out.println("L= "+L+"H= "+H);
if(L>=H) { // 교차된다면
int tmp=pivot;
data[start]=data[H]; // 배열의 값을 교환한다!! 위치를 바꾸는게 아님!
data[H]=tmp;
break; // 멈춰라
}
int tmp=data[L];
data[L]=data[H];
data[H]=tmp;
}
quick_sort(data,start,H-1); // 재귀함수 만들면 종료조건 만들기 필수!!
quick_sort(data,H=1,end);
}
public static void main(String[] args) {
// 재귀 함수???
// 로직을 코드로 옮길수있나???
int[] data= {5,1,9,10,4,2,7,3,6,8};
for(int i=0;i<data.length;i++) {
System.out.print(data[i]+" ");
}
System.out.println();
quick_sort(data,0,data.length-1);
// 메서드 시그니처: 함수 3요소-> input,output,기능
// int[]x1,intx2 | xxx(void) | 퀵 정렬
for(int i=0;i<data.length;i++) {
System.out.print(data[i]+" ");
}
System.out.println();
}
}
'개발자노트' 카테고리의 다른 글
클래스) 기본 용어, 정의 복습 (0) | 2022.06.20 |
---|---|
반복문 while을 통해 소수 구하기 (0) | 2022.06.17 |
함수) 모듈화,랜덤,배열,반복문 종합 예제) 로또 (0) | 2022.06.17 |
클래스) 학생부 (0) | 2022.06.17 |
클래스) 멤버변수와 클래스변수에 이해(모래성게임) (0) | 2022.06.17 |