Programing_Java
JAVA#13 _ 선택정렬과 함수화 본문
#1 선택정렬
: 가장 작은 요소를 찾아서 배열의 맨 앞과 교환하는 방식으로 정렬하는 알고리즘
// 배열의 각 위치에 대해
for (int i = 0; i < n - 1; i++) {
// 가장 작은 값의 인덱스를 찾기 위한 변수
int minIndex = i;
// i 이후의 원소들 중에서 가장 작은 값을 찾는다
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 가장 작은 값이 i번째 위치가 아니면 교환
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
#2 선택정렬 실행
1. 사용자로부터 3~10 사이의 정수를 입력받음
2. 입력받은 정수를 배열의 길이로 지정하고 랜덤한 값들을 배열 속에 대입
3. 배열 속에 랜덤한 값들이 대입되면 해당 배열 출력
4. 랜덤한 순서의 배열을 선택정렬을 사용하여 오름차순으로 정렬
5. 정렬된 배열들을 출력
#3 선택정렬 함수화
1. 사용자로부터 숫자를 입력받을 함수 생성
2. 입력받은 숫자로 배열을 선언하고, 배열 속에 랜덤한 값을 대입해주는 함수 생성
3. 배열을 출력해주는 함수 생성
4. 선택정렬 알고리즘을 실행 시켜주는 함수 생성
5. main 함수 실행
// 1. 사용자로부터 숫자 개수 입력 받는 함수
public static int getNumber() {
Scanner scanner = new Scanner(System.in);
int n;
while (true) {
System.out.print("정렬할 숫자의 개수를 입력하세요 (2 이상): ");
n = scanner.nextInt();
if (n >= 3 && n <= 10) {
break; // 숫자가 3 이상, 10이하를 입력하면 while문을 빠져나감
} else {
System.out.println("숫자는 2 이상 10이하 합니다. 다시 입력해주세요.");
}
}
return n; // 입력 받은 값을 반환
}
// 2. 1부터 100 사이의 랜덤 숫자 생성하는 함수
public static int[] RandomArray(int size) {
Random random = new Random();
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = random.nextInt(100) + 1;
}
return arr; // 저장된 배열을 반환
}
// 3. 배열 출력 함수
public static void printArray(int[] arr, String message) {
System.out.println(message);
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
// 4. 선택 정렬 알고리즘 함수
public static void selectionSort(int[] arr) {
int n = arr.length;
// 배열의 첫 번째 값부터 마지막 값까지 반복
for (int i = 0; i < n - 1; i++) {
int minIndex = i; // 현재 인덱스를 최소값 인덱스로 설정
// 현재 인덱스 이후의 배열에서 최소값을 찾기 위한 반복
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) { // 더 작은 값을 찾으면
minIndex = j; // 최소값 인덱스를 업데이트
}
}
// 최소값이 현재 위치에 있지 않으면 교환
if (minIndex != i) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
// 메인 함수
public static void main(String[] args) {
// 1. 사용자 입력 받기
int size = getNumber();
// 2. 랜덤 숫자 생성
int[] arr = RandomArray(size);
// 3. 생성된 배열 출력
printArray(arr, "생성된 배열:");
// 4. 선택 정렬 알고리즘 실행
selectionSort(arr);
// 5. 정렬 완료된 배열 출력
printArray(arr, "정렬 후 배열:");
}
#4 Feedback
1. class를 제외한 모든 이름은 소문자로 시작
public static int[] RandomArray(int size){
public static int[] randomArray(int size){
2. 스캐너, 랜덤 같이 객체를 호출하는 경우 객체명을 지정할때 풀네임을 안써도 괜찮다
Scanner scanner = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
3. 대소관계를 비교할 경우, 작은수를 젤 왼쪽으로, 젤 큰 수를 오른쪽으로 보면 가독성이 좋아짐
if(n >= 3 && n <= 10){
if(3 <= n && n <= 10){
4. while문을 작성하면서 else문이 필요없다면, 생략을 하는 것이 코드의 depth가 줄어들기 때문에 가독성이 좋아짐
while(true){
if(3<=n && n <= 10) {
break;
}
else {
System.out.println("숫자는 3이상 10이하 사이여야 합니다. 다시 입력해주세요.");
}
}
// ==================================================================
while(true){
if(3<=n && n<=10){
break;
}
System.out.println("숫자는 3이상 10이하 사이여야 합니다. 다시 입력해주세요.");
}
5. 반복의 횟수를 알아 for문을 반복할때, 반복의 횟수는 배열의 길이로 지정하는 것이 좋음
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = random.nextInt(100) + 1; // 1부터 100 사이의 랜덤 숫자 생성
}
// ====================================================================
int[] arr = new int[size];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(100) + 1; // 1부터 100 사이의 랜덤 숫자 생성
}
'JAVA_' 카테고리의 다른 글
JAVA#15 _ 객체 지향 언어 (0) | 2025.01.10 |
---|---|
JAVA#14 _ MVC Pattern (0) | 2025.01.09 |
JAVA#12 _ 함수 (0) | 2025.01.07 |
JAVA#11 _ 게임 프로그램(Pokemon) (0) | 2025.01.06 |
JAVA#9 _ 배열 속 최댓값 & 최솟값 (0) | 2025.01.02 |