package class02;
public class Test01 {
public static void main(String[] args) {
/*
* 선택정렬 코드 작성
* */
int[] datas = {1, 50, 34, 7};
int tmp, minIdx;
for (int a = 0; a < datas.length - 1; a++) {
minIdx = a;
for (int i = a + 1; i < datas.length; i++) {
if (datas[i] < datas[minIdx]) {
minIdx = i;
}
}
tmp = datas[a];
datas[a] = datas[minIdx];
datas[minIdx] = tmp;
}
System.out.print("[ ");
for (int data: datas) {
System.out.print(data + " ");
}
System.out.println("]");
}
/*
* 디버깅표
*
* datas minIdx a a < 3 i i < 4 datas[i] < datas[minIdx]
* ==================================================================================
* [ 1, 50, 34, 7 ] 0 T
* 0 1 T F
* 2 T F
* 3 T F
* 4 F
* [ 1, 50, 34, 7 ] 1 T
* 1 2 T T
* 2 3 T T
* 3 4 F
* [ 1, 7, 34, 50 ] 2 T
* 2 3 T F
* 4 F
* [ 1, 7, 34, 50 ] 3 F
*
* */
}
선택 정렬을 공부하다가 추가 의문 사항이 생겼다
선택 정렬은 불안정 정렬이다..왠지 안정일 거 같은 느낌이 들어서 확인해보자
package class02;
import java.util.Scanner;
class Pair {
private int n;
private char c;
Pair(int n, char c) {
this.n = n;
this.c = c;
}
// Pair() {
// }
public int getN(){
return n;
}
public char getC(){
return c;
}
}
public class Test02 {
public static void main(String[] args) {
/*
* 선택정렬 코드 작성
*/
/*
*
* 여러 테스트 케이스를 넣기 위한 콘솔 입력 받기 입력 예시는 아래와 같다 3 5 --> 테스트 케이스의 수, 각 케이스의 길이 0 1 5
* 2 6 --> 각 테스트 케이스 2 2 3 4 5 4 2 12 9 0
*
*/
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int len = sc.nextInt();
for (int i = 0; i < n; i++) {
/*
* 동일 값을 구분하기 위해 pair의 배열로 저장하자
* pair의 규칙은 다음과 같다
* <값, 구분자>
* <1, a>, <1, b> --> 같은 1의 값이지만 a와 b로 구분할 수 있다
* */
// Pair p = new Pair(1, 'c');
Pair[] datas = new Pair[len];
char c = 'a';
for (int j = 0; j < len; j++) {
datas[j] = new Pair(sc.nextInt(), c++);
}
// 정렬 전 확인
System.out.print("[ ");
for (Pair data : datas) {
System.out.print("<" + data.getN() + "," + data.getC() + "> ");
}
System.out.println("]");
// 정렬
int minIdx;
Pair tmp;
for (int a = 0; a < datas.length - 1; a++) {
minIdx = a;
for (int k = a + 1; k < datas.length; k++) {
if (datas[k].getN() < datas[minIdx].getN()) {
minIdx = k;
}
}
tmp = datas[a];
datas[a] = datas[minIdx];
datas[minIdx] = tmp;
}
// 결과 확인
System.out.print("[ ");
for (Pair data : datas) {
System.out.print("<" + data.getN() + "," + data.getC() + "> ");
}
System.out.println("]");
}
}
}
코드는 위와 같이 작성했다
Pair를 이용해서 같은 값을 구분했다
불안정되는 케이스는 바로 찾았다
중복되는 3의 값이 0, 1이 정렬되는 과정에서 뒤섞이게 된다
궁금증 해결!
'-- 기타 -- > IT KOREA 국비 지원 강의' 카테고리의 다른 글
[JAVA] 클래스(객체) 수업 용어(개념) 정리 2 (0) | 2023.12.03 |
---|---|
[JAVA] 클래스(객체) 수업 용어(개념) 정리 (0) | 2023.11.30 |
[알고리즘] 삽입 정렬 코드 작성 (0) | 2023.11.28 |
[알고리즘] 버블 정렬 코드 리팩토링 (1) | 2023.11.27 |
[이클립스] Open Associated Perspective 안내창 (0) | 2023.11.27 |