서노썬
sun noes sun
서노썬
전체 방문자
오늘
어제
  • 카테고리 (142)
    • Java (89)
      • Day1 (20)
      • Day2 (16)
      • Day3 (4)
      • Day4 (5)
      • Day5 (2)
      • Day6 (2)
      • Day7 (4)
      • Day8 (6)
      • Day9 (3)
      • Day10 (0)
      • Day11 (0)
      • Day12 (0)
      • Day13 (3)
      • Day14 (0)
      • Day15 (0)
      • Day16 (0)
      • Day19 (0)
      • Day20 (0)
      • Day21 (2)
      • Day22 (4)
      • Day23 (2)
      • Day24 (5)
      • Day25 (4)
      • Day27 (2)
      • Day28 (3)
      • Day29 (1)
      • Day30 (1)
      • Day31 (0)
      • Day32 (0)
      • Dat33 (0)
      • Day34 (0)
      • Day35 (0)
      • Day36 (0)
    • HTML (37)
      • Day36 (20)
      • Day37 (3)
      • Day38 (2)
      • Day39 (8)
      • Day40 (3)
    • SQL (4)
      • Day40 (4)
      • Day41 (0)
      • Day42 (0)
      • Day43 (0)
      • Day44 (0)
      • Day45 (0)
    • JSP (0)
      • Day46 (0)
      • Day75 (0)
    • PYTHON (0)
      • Day75 (0)
      • Day76 (0)
    • Photo (12)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 글

태그

  • java자료형
  • java메뉴입력
  • 자바break
  • 자바
  • 자바자료형
  • 논리연산자
  • 자바continue
  • java데이터타입
  • 자바연산자
  • Java

티스토리

hELLO · Designed By 정상우.
서노썬

sun noes sun

Java/Day2

[Java] Selection sort 선택 정렬 알고리즘

2021. 10. 31. 02:16

사용자에게 임의의 숫자 5개를 입력 받은 후 치환을 이용하여 오름차순으로 정렬한다.

 

- 임의의 숫자 5개를 입력받을 것

- 입력받은 숫자들의 값의 크기를 서로 비교할 것

- 입력받은 숫자들을 오름차순으로 정렬할 것

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package Swap;
 
import java.util.Scanner;
 
public class SwapTest2 {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num1=0, num2=0, num3=0, num4=0, num5=0, temp=0;
        
        System.out.println("첫 번째 숫자 입력");
        num1 = sc.nextInt();
        System.out.println("두 번째 숫자 입력");
        num2 = sc.nextInt();
        System.out.println("세 번째 숫자 입력");
        num3 = sc.nextInt();
        System.out.println("네 번째 숫자 입력");
        num4 = sc.nextInt();
        System.out.println("다섯 번째 숫자 입력");
        num5 = sc.nextInt();
        
        if(num1>num2) {
            temp=num1;
            num1=num2;
            num2=temp;
        }
        if(num1>num3) {
            temp=num1;
            num1=num3;
            num3=temp;
        }
        if(num1>num4) {
            temp=num1;
            num1=num4;
            num4=temp;
        }
        if(num1>num5) {
            temp=num1;
            num1=num5;
            num5=temp;
        }
        // 여기까지의 과정으로 값이 가장 작은 숫자가 결정된다.
        if(num2>num3) {
            temp=num2;
            num2=num3;
            num3=temp;
        }
        if(num2>num4) {
            temp=num2;
            num2=num4;
            num4=temp;
        }
        if(num2>num5) {
            temp=num2;
            num2=num5;
            num5=temp;
        }
        // 여기까지의 과정으로 값이 두 번째로 작은 숫자가 결정된다.
        if(num3>num4) {
            temp=num3;
            num3=num4;
            num4=temp;
        }
        if(num3>num5) {
            temp=num3;
            num3=num5;
            num5=temp;
        }
        // 여기까지의 과정으로 값이 세 번째로 작은 숫자가 결정된다.
        if(num4>num5) {
            temp=num4;
            num4=num5;
            num5=temp;
        }
        // 마지막으로 값이 네 번째로 작은 숫자와 가장 큰 숫자가 결정된다.
 
        System.out.println("입력하신 숫자의 오름차순은 " + num1 + "  " + num2 + "  " + num3 + "  " + num4 + "  " + num5 + " 입니다.");
    }
 
}
 
Colored by Color Scripter
cs

 

 

* 설명

사용자로부터 입력받은 숫자 5개에 대해 if문의 조건이 참일 경우 치환이 되며 거짓일 경우 치환되지 않는다. 그렇기 때문에 조건문에 대해 true일 경우 치환, false일 경우 치환되지 않아 해당하는 조건문의 내용이 실행되지 않고 아래의 조건문으로 내려와서 실행을 하게 된다.


* 다른 방법도 생각해보기

그런데 식이 비효율적인 듯 하다. 최상위 조건문만 if로 두고 다른 조건문은 else if 나 else로 주면 되지 않을까?

2개의 숫자를 비교하여 값이 더 크다면 무조건 치환이 이루어져야 한다. if가 아닌 else if나 else로 주게 되면 위에서의 조건문이 크다고 아래의 식은 실행이 되지 않아 또 다른 값과 비교가 이루어지지 않게 된다.

 

모든 숫자들을 서로 다 비교해주어야 하기 때문에 어느 하나의 값이 참이라고 해서 다른 숫자와의 비교가 무시되면 안되기 때문에 if문 외의 것으로 사용을 할 경우 원하는 오름차순으로 정렬시길 수 없다.

'Java > Day2' 카테고리의 다른 글

[Java] continue 와 break 예문 & 논리 OR연산자, 논리 AND 연산자  (0) 2021.10.31
[Java] continue 와 break  (0) 2021.10.31
치환  (0) 2021.10.31
알고리즘의 차이. 더 효율이 좋은 식에 대한 비교  (0) 2021.10.31
Scanner 클래스 - 숫자를 입력 받아 값의 크기 비교하기  (0) 2021.10.31
    'Java/Day2' 카테고리의 다른 글
    • [Java] continue 와 break 예문 & 논리 OR연산자, 논리 AND 연산자
    • [Java] continue 와 break
    • 치환
    • 알고리즘의 차이. 더 효율이 좋은 식에 대한 비교

    티스토리툴바