일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 반복문
- Java
- FastAPI
- spring
- 자바
- pyqt
- 객체지향
- Mac
- 맥
- Homebrew
- python
- ibatis
- nodejs
- html
- Oracle
- 컬렉션프레임워크
- 생활코딩
- 배열
- Android
- ddit
- Error
- 자바문제
- 이클립스
- servlet
- 대덕인재개발원
- jsp
- crud
- API
- 단축키
- JDBC
Archives
- Today
- Total
romworld
Chapter 05-3. 정렬, 석차 구하기 본문
정렬
- 석차구하기 : 점수를 비교해 작은 점수의 등수를 증가시키는 방식
- 선택정렬 : 가장 작은 숫자를 찾아서 앞으로 보내는 방식
- 삽입정렬 : 두 번째 숫자부터 앞의 숫자들과 비교해서 큰 수는 뒤로 밀고 중간에 삽입하는 방식
- 버블정렬 : 바로 뒤의 숫자와 비교해서 큰 수를 뒤로 보내는 방식
(메소드는 소문자로 시작하고 괄호가 있다!
printRanks(arr); 석차내기
selectsort(arr); 선택정렬
insertsort(arr); 삽입정렬
bubblesort(arr); 버블정렬)
- 석차구하기
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(100) + 1;
}
System.out.println(Arrays.toString(arr));
System.out.println("----------------------");
System.out.println("----------------------");
// score = {5,3,4,1}
// ranks = {1,3,2,4}
int[] ranks = new int[arr.length]; // {0,0,0,0,0}
for (int i = 0; i < ranks.length; i++) {
// 순위를 나타내기 위한 배열을 선언함
// 배열의 길이는 순위를 구하려는 배열의 길이와 같음
ranks[i] = 1;
// 순위를 나타내는 배열의 모든 값에 1을 입력함
// 누구와도 비교하지 않았기 때문에 모두 1등임
}
for (int i = 0; i < ranks.length; i++) {
// 순위를 구하려는 배열의 for문을 작성
for (int j = 0; j < ranks.length; j++) {
// 다른 값들과의 비교를 위해 순위를 구하려는 배열을
// 중첩 for문 작성
if (arr[i] < arr[j]) {
ranks[i]++;
// arr = {50,100,80}
// ranks = {1,1,1} => {2,1,1} => {3,1,1}
}
System.out.println(Arrays.toString(ranks));
}
}
for (int i = 0; i < ranks.length; i++) {
System.out.println(arr[i] + " : " + ranks[i] + "등");
}
-선택정렬
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(100) + 1;
}
for (int i = 0; i < arr.length - 1; i++) {
int min = i; // 가장 작은 숫자의 위치
// 비교한 대상이 가장 작은 수라는 가정으로 매 회전 시작
for (int j = i + 1; j < arr.length; j++) {
// 비교대상 다음 순서부터 끝 순서까지 비교대상과 크기를 비교
if (arr[j] < arr[min]) {
// 만약 비교대상보다 특정위치(j)의 값이 더 작다면
min = j;
// 가장 작은 값의 위치는 j 위치이다
}
}
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
System.out.println((i + 1) + "회전 : " + Arrays.toString(arr));
}
- 삽입정렬
반복횟수만을 위한 for문
반복횟수는 배열의 길이 -1만큼으로 버블정렬과 동일하나
시작의 위치가 첫번째(0)위치가 아닌 두번째(1)부터
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(100) + 1;
}
for (int i = 1; i < arr.length; i++) {
int pick = arr[i]; // 비교대상값을 임시저장함
int j = 0;
for (j = i - 1; j >= 0; j--) {
// 반복은 비교 대상 앞번호부터 앞으로 하나씩 비교한다.
if (pick < arr[j]) {
// 임시저장한 값보다 현재 비교대상의 값이 크다면
arr[j + 1] = arr[j];
// 현재 비교대상의 값을 뒤로 한 칸 밀고 비교를 계속한다.
} else {
break; // 해당 회전을 종료한다.
}
}
arr[j + 1] = pick;
// 값을 변경한 마지막 위치
// (값을 변경하지 않았다면 j의 마지막 번호)
// 뒤에 복사한 값을 덮어씌운다
System.out.println((i + 1) + "회전 : " + Arrays.toString(arr));
}
-버블정렬
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(100) + 1;
}
System.out.println(Arrays.toString(arr));
// 반복횟수만을 위한 for문, 반복횟수는 배열의 길이 -1만큼
for (int i = 0; i < arr.length - 1; i++) {
boolean changed = false; // 교환이 일어나는지 확인
for (int j = 0; j < arr.length - i - 1; j++) {
// 1회전씩 반복 될수록 큰 숫자들이 맨 뒤로 자리가 옮겨져
// 있으므로 맨 뒤에서 i 갯수만큼 숫자는 비교할 필요가 없음
if (arr[j] > arr[j + 1]) {
int tmp = arr[j]; // arr[j]의 값을 임시 저장
arr[j] = arr[j + 1]; // arr[j]의 위치에 arr[j+1]값 입력
arr[j + 1] = tmp;// arr[j+1]에 임시저장한 arr[j]값 입력
changed = true;
}
}
System.out.println((i + 1) + "회전 : " + Arrays.toString(arr));
if (changed == false) { // 교환이 일어나지 않았다면
break; // 반복을 종료해라
}
}
'JAVA > 개념정리' 카테고리의 다른 글
Chapter 06. 객체지향 프로그래밍(1) (1) | 2022.09.23 |
---|---|
Chapter 05-4. 다차원 배열, for each (0) | 2022.09.19 |
Chapter 05-2. 배열 (0) | 2022.09.14 |
Chapter 05-1. 참조 타입과 참조 변수 (0) | 2022.09.14 |
Chapter 04. 조건문과 반복문 (3) | 2022.09.12 |
Comments