Java/코딩테스트

선택 정렬(JAVA)

_JHS_ 2024. 4. 1. 13:06

개념)

1. 배열의 앞에서 부터 가장 작은 수를 찾아낸다.

2. 배열의 현재 앞의 값보다 뒤에 작은 값이 있다면 두 수의 위치를 변경한다.

j로 가장 작은 값의 인덱스를 찾는다.

 

i번째와 가장작은 minIndex번째랑 값을 서로 바꾼다.

 

 

 

정렬 Code)

public static int[] selectionSort(int[] nums){
    for(int i=0; i<nums.length; i++){
        int minIndex = i;

        for(int j=i+1; j<nums.length; j++){
            if(nums[j] < nums[minIndex]){
                minIndex = j;
            }
        }
        swap(nums,i,minIndex);
    }

    return nums;
}

public static void swap(int[] nums, int i, int j){
    int tmp = nums[j];
    nums[j] = nums[i];
    nums[i] = tmp;
}

 

 

 

(전체) Code  )

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

class Test{
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        String s = bf.readLine();
        StringTokenizer st = new StringTokenizer(s);
        int[] nums = new int[st.countTokens()];

        for(int i=0; i<nums.length; i++){
            nums[i] = Integer.parseInt(st.nextToken());
        }

        nums = selection_sort(nums);

        print(nums);
    }

    public static int[] selectionSort(int[] nums){
        for(int i=0; i<nums.length; i++){
            int minIndex = i;
    
            for(int j=i+1; j<nums.length; j++){
                if(nums[j] < nums[minIndex]){
                    minIndex = j;
                }
            }
            swap(nums,i,minIndex);
        }
    
        return nums;
    }
    
    
    public static void swap(int[] nums, int i, int j){
        int tmp = nums[j];
        nums[j] = nums[i];
        nums[i] = tmp;
    }

    public static void print(int[] nums) throws IOException{
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        for(int num : nums){
            bw.write(num+ " ");
        }
        bw.flush();
        bw.close();
    }
}