'안드로이드/Java 알고리즘'에 해당되는 글 3건

728x90
선택정렬(Selection Sort)은 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 그 위치에 어떤 원소를 넣을지 선택하는 알고리즘이다.

오름차순 정렬은

첫 번째 순서에는 첫 번째 위치에 가장 최소값을 넣는다.
두 번째 순서에는 두 번째 위치에 남은 값 중에서의 최소값을 넣는다.

세 번째 순서에는 세 번째 위치에 남은 값 중에서의 최소값을 넣는다.

......

 

1. 주어진 배열 중에서 최소값을 찾는다.
2. 그 값을 맨 앞에 위치한 값과 교환한다.
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교환한다.
하나의 원소만 남을 때까지 위의 1~3 과정을 반복한다.

public class SelectionSort {
    public static void printArray(int[] a){
        for(int i = 0; i < a.length; i++){
            System.out.print("[" + a[i] + "]");
        }
        System.out.print("\n");
    }
 
    public static void main(String[] args) {
        int[] a = {952468165381};
 
        // 정렬 전의 배열 내용을 표시
        System.out.print("정렬 전 배열\n");
        printArray(a);
        System.out.print("\n");
 
        int[] aa = arr(a);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(오름차순)\n");
        printArray(aa);
 
        System.out.println("************************");
        int[] b = {952468165381};
        int[] bb = brr(b);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(내림차순)\n");
        printArray(bb);
 
    }
 
    private static int[] arr(int[] a) {
        // 선택 정렬(오름차순)
        int i, var, min, temp;
        for (i = 0; i < a.length -1 ; i++) {
            min = i;
            for (var = i + 1; var < a.length; var++) {
                // 맨 앞의 수를 하나씩 증가시키면서 값 비교하여 조건 비교 및 값 맞바꿈
                System.out.printf("i=%d, var=%d :: ",i, var);
                if (a[var] < a[i]) {
                    // 기준 값(i index)과 변동값(var index)을 비교하여
                    // 기준값(a[i])이 더 크면 맞바꿈 ==> 기준값 자리에 최소값을 넣음
                    min = var;
                    temp = a[i];
                    a[i] = a[min];
                    a[min] = temp;
                    System.out.printf(
                            "min=%d, temp=%d, a[%d]=%d, a[%d]=%d",
                            min,temp, i, a[i], min, a[min]
                    );
                }
                System.out.print("\n");
                printArray(a);
            }
        }
        return a;
    }
 
    private static int[] brr(int[] a) {
        // 선택 정렬(내림차순)
        int i, var, max, temp;
        for (i = 0; i < a.length -1 ; i++) {
            max = i;
            for (var = i + 1; var < a.length; var++) {
                // 맨 앞의 수를 하나씩 증가시키면서 값 비교하여 조건 비교 및 값 맞바꿈
                System.out.printf("i=%d, var=%d :: ",i, var);
                if (a[var] > a[i]) { // 배열 앞의 값이 더 크면
                    max = var;
                    temp = a[i];
                    a[i] = a[max];
                    a[max] = temp;
                    System.out.printf(
                            "max=%d, temp=%d, a[%d]=%d, a[%d]=%d",
                            max,temp, i, a[i], max, a[max]
                    );
                }
                System.out.print("\n");
                printArray(a);
            }
        }
        return a;
    }
 
}
 

 

 

'안드로이드 > Java 알고리즘' 카테고리의 다른 글

Java 삽입정렬(Insertion Sort)  (0) 2022.01.10
Java 버블정렬(Bubble Sort)  (0) 2022.01.10
블로그 이미지

Link2Me

,
728x90

삽입 정렬이란 2번째 원소부터 n번째 원소까지 차례로 해당 원소가 위치할 인덱스에 원소를 삽입하는 방식을 사용하는 정렬 방식이다.

 

public class InsertionSort {
    public static void printArray(int[] a){
        for(int i : a){
            System.out.print("[" + i + "]");
        }
        System.out.print("\n");
    }
 
    public static void main(String[] args) {
        int[] a = {952468165381};
 
        // 정렬 전의 배열 내용을 표시
        System.out.print("정렬 전 배열\n");
        printArray(a);
        System.out.print("\n");
 
        int[] aa = arr(a);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(오름차순)\n");
        printArray(aa);
 
        System.out.print("\n");
 
        int[] bb = crr(a);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(내림차순)\n");
        printArray(bb);
    }
 
    public static int[] arr (int[] a){
        int i, prev, temp;
        // 삽입 정렬(오름차순)
        // 삽입 정렬이란 2번째 원소부터 n번째 원소까지 차례로
        // 해당 원소가 위치할 인덱스에 원소를 삽입하는 방식을 사용하는 정렬 방식
        for(i = 1; i < a.length; i++){
            temp = a[i];
            System.out.printf("a[%d]=%d(key) :: ",i, a[i]);
            for(prev = i -1; prev >= 0; prev--){
                if(a[prev] > temp){ // 이전 원소의 배열값이 key(temp)값보다 더 크면
                    a[prev + 1= a[prev]; // 자리 바꿈
                    System.out.printf(
                            "i=%d, prev=%d, temp=%d(key), a[%d]=%d",
                            i,prev,temp,prev+1,a[prev+1]
                    );
                } else {
                    break;
                }
                System.out.print("\n");
            }
            a[prev + 1= temp;
            System.out.printf("i=%d, prev=%d, a[%d]=%d\n",i, prev, prev+1, temp);
            printArray(a);
        }
        return a;
    }
 
    public static int[] brr (int[] a){
        int i, prev, temp;
        // 삽입 정렬(내림차순)
        for(i = 1; i < a.length; i++){
            temp = a[i];
            for(prev = i -1; prev >= 0 && a[prev] < temp; prev--){
                a[prev + 1= a[prev];
            }
            a[prev + 1= temp;
        }
        return a;
    }
 
    public static int[] crr (int[] a){
        int i, prev, temp;
        // 삽입 정렬(내림차순)
        for(i = 1; i < a.length; i++){
            temp = a[i]; // 현재 선택된 원소의 값을 임시 변수에 저장해준다.
            prev = i - 1// 현재 원소를 기준으로 이전 원소를 탐색하기 위한 index 변수
            // 현재 선택된 원소가 이전 원소보다 큰 경우까지만 반복. 단, 0번째 원소까지만 비교
            while (prev >= 0 && a[prev] < temp){
                a[prev + 1= a[prev];
                prev--;
            }
            // 탐색이 종료된 지점에 현재 선택되었던 변수의 값을 삽입해준다
            a[prev + 1= temp;
        }
        return a;
    }
}
 
 

 

 

'안드로이드 > Java 알고리즘' 카테고리의 다른 글

Java 선택 정렬(Selection Sort)  (0) 2022.01.11
Java 버블정렬(Bubble Sort)  (0) 2022.01.10
블로그 이미지

Link2Me

,
728x90

버블 정렬이란, 이웃한 두 요소의 대소 관계를 비교하여 교환을 반복하는 정렬 알고리즘을 뜻한다. 인접한 2가지 요소의 대소 관계를 검사하여 원하는 순서대로 되어 있지 않은 경우 교환을 하는 것이다. 오름차순, 내림차순으로 정렬할 수 있다.

 

public class BubbleSort {
    public static void printArray(int[] a){
//        for(int i = 0; i < a.length; i++){
//            System.out.print("[" + a[i] + "]");
//        }
        for(int i: a){
            System.out.print("["+i+"]");
        }
        System.out.print("\n");
    }
 
    public static void main(String[] args) {
        int[] a = {952468165381};
 
        // 정렬 전의 배열 내용을 표시
        System.out.print("정렬 전 배열\n");
        printArray(a);
        System.out.print("\n");
 
        int[] aa = arr(a);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(오름차순)\n");
        printArray(aa);
 
        int[] bb = brr(a);
        // 정렬 후의 배열 내용 표시
        System.out.print("정렬 후 배열(내림차순)\n");
        printArray(bb);
 
    }
 
    private static int[] arr(int[] a) {
        // 버블 정렬(오름차순)
        int i, j, temp;
        for (i = 0; i < a.length -1 ; i++) {
            for (j = 0; j < a.length - i -1; j++) {
                // 맨 뒤가 큰 수가 되도록 이동하고, 맨 뒷수를 하나씩 줄이기
                System.out.printf("i=%d, j=%d :: ",i, j);
                if (a[j] > a[j+1]) { // 배열 앞의 값이 더 크면
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1= temp;
                    System.out.printf(
                            "j=%d, temp=%d, a[%d]=%d, a[%d]=%d",
                            j,temp, j, a[j], j+1, a[j+1]
                    );
                }
                System.out.print("\n");
                printArray(a);
            }
        }
        return a;
    }
 
    private static int[] brr(int[] a) {
        // 버블 정렬(내림차순)
        int i, j, temp;
        for (i = 0; i < a.length -1 ; i++) {
            for (j = 0; j < a.length - i -1; j++) {
//                System.out.printf("i=%d, j=%d :: ",i, j);
                if (a[j] < a[j+1]) { // 배열 앞의 값이 더 작으면
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1= temp;
//                    System.out.printf(
//                            "j=%d, temp=%d, a[%d]=%d, a[%d]=%d",
//                            j,temp, j, a[j], j+1, a[j+1]
//                    );
                }
//                System.out.print("\n");
//                printArray(a);
            }
        }
        return a;
    }
 
}
 

 

'안드로이드 > Java 알고리즘' 카테고리의 다른 글

Java 선택 정렬(Selection Sort)  (0) 2022.01.11
Java 삽입정렬(Insertion Sort)  (0) 2022.01.10
블로그 이미지

Link2Me

,