๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - Counting Sort (์นด์šดํŒ… ์ •๋ ฌ / ๊ณ„์ˆ˜ ์ •๋ ฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

2020. 11. 16. 00:55
๋ชฉ์ฐจ
  1. ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort)
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š

 

'๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก

๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

iseunghan.tistory.com

 

 

๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort)

์นด์šดํŒ… ์ •๋ ฌ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๐šถ(๐‘›) ์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.  ํ€ต ์ •๋ ฌ(Quick Sort), ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort) ์˜ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๐šถ(nlogn) ์ธ๋ฐ ์นด์šดํŒ… ์ •๋ ฌ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๐šถ(๐‘›) ์œผ๋กœ ์†๋„๊ฐ€ ์•„์ฃผ ์šฐ์ˆ˜ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

์นด์šดํŒ… ์ •๋ ฌ์„ ์ฝ”๋“œ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด์„œ ๋ณด์ž.

 

๋จผ์ €, ๋ฐฐ์—ด์€ ์„ธ๊ฐ€์ง€๋ฅผ ์„ ์–ธ ํ•ด์ค€๋‹ค.

        int[] array = new int[100]; 	//์ˆ˜์—ด์˜ ์›์†Œ : 100๊ฐœ
        int[] counting = new int[101];	//์ˆ˜์˜ ๋ฒ”์œ„ : 0~100
        int[] sorted = new int[100];	//์ •๋ ฌ ๋  ๋ฐฐ์—ด

 

arr ๋ฐฐ์—ด์— ๊ฐ๊ฐ ๋‹ด๊ฒจ ์žˆ๋Š” ๊ฐ’์„ counting ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฆ๊ฐ€ ์‹œ์ผœ ์ค€๋‹ค.

๊ทธ๋ƒฅ ๋ง๊ทธ๋Œ€๋กœ ํ•ด๋‹น ์ˆซ์ž์ผ๋•Œ, counting ์›์†Œ๊ฐ’์„ ์ฆ๊ฐ€ ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜์ž.)

for(int i=0; i<arr.length; i++) {
	counting[ arr[i] ]++;
}

 

counting์˜ ๊ฐ ์›์†Œ์˜ ๊ฐ’์€ arr๊ฐ’์ด ์ •๋ ฌ๋˜์„œ sorted ๋ฐฐ์—ด์— ๋“ค์–ด๊ฐˆ ์ธ๋ฑ์Šค ๊ฐ’์ด ๋œ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด,

counting ์˜ ๊ฐ ์›์†Œ์˜ ๊ฐ’์„ counting[i] = counting[i] + counting[i-1]; ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

for(int i=1; i<counting.length; i++) {
	counting[i] += counting[i-1];
}

 

 

์•ž์—์„œ ํ–ˆ๋˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด, arr๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” counting์˜ ์›์†Œ๊ฐ’์€ sorted์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋œ๋‹ค.





arr[i]์˜ ๊ฐ’์ด counting์˜ index๊ฐ’์ด๊ณ , counting์˜ ๊ฐ’์„ -1 ์‹œํ‚จ ๊ฐ’์„ sorted์˜ index๋กœ ์‚ฌ์šฉํ•ด ํ•ด๋‹น index ๊ฐ’์— arr[i] ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

for (int i = array.length - 1; i >= 0; i--) {
            int value = array[i];
            counting[value]--;
            result[counting[value]] = value;
        }

 

์ด์ œ ์ถœ๋ ฅ์„ ํ•ด๋ณด๋ฉด,

1 2 3 4 5

์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ์ด ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

 

๋งŒ์•ฝ ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ์ถœ๋ ฅ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๋ฉด ์œ„ ๋ฐฉ๋ฒ• ๋ณด๋‹ค, ๋” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.

public class Counting_Sort {
    public static void main(String[] args) {
        int[] arr = new int[10]; // ํฌ๊ธฐ๋ฅผ 10์œผ๋กœ ์ •ํ–ˆ๋‹ค๋ฉด, ์ˆ˜์˜ ๋ฒ”์œ„๋„ 0~10๊นŒ์ง€ ์ œํ•œํ•ด์•ผํ•œ๋‹ค.

        for (int i = 0; i < arr.length; i++) {
            arr[(int)(Math.random() * 11)]++; // Math.random() * 11 ๋กœ ๋ฒ”์œ„๋ฅผ ์ œํ•œ ์‹œ์ผฐ๋‹ค.
        }

        for (int i = 0; i < arr.length; i++) {
            while (arr[i] > 0) {
                System.out.print(i + " ");
                arr[i]--;
            }
        }
    }
}

 

์ž…๋ ฅ ๋ฐ›์€ (๋žœ๋ค์œผ๋กœ ์ฃผ์–ด์ง€๋Š”) ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , while๋ฌธ์œผ๋กœ ํ†ตํ•ด ์ธ๋ฑ์Šค๊ฐ€ 1์ด์ƒ์ธ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅ์‹œ์ผœ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

 

์˜ค๋Š˜ Counting Sort ๋ฅผ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ, ์„ฑ๋Šฅ์ด ํ‰์†Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋˜ ํ€ต ์ •๋ ฌ(Quick Sort) ๋ณด๋‹ค ํ›จ์”ฌ ๋›ฐ์–ด๋‚˜๊ณ , ์ฝ”๋“œ๋„ ๊ทธ๋ฆฌ ๋ณต์žกํ•˜์ง€ ์•Š์•„์„œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ๊ฐ™์€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

 


 

์ฐธ๊ณ  : st-lab.tistory.com/104?category=856997

 

์ž๋ฐ” [JAVA] - ์นด์šดํŒ… ์ •๋ ฌ (Counting Sort / ๊ณ„์ˆ˜ ์ •๋ ฌ)

[์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชจ์Œ] ๋”๋ณด๊ธฐ 1. ์„ ํƒ ์ •๋ ฌ (Selection Sort) 2. ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort) - [ํ˜„์žฌ ํŽ˜์ด์ง€] Counting Sort [๊ณ„์ˆ˜ ์ •๋ ฌ / ์นด์šดํŒ… ์ •๋ ฌ] Counting Sort... ๊ณ„์ˆ˜ ์ •๋ ฌ, ์นด์šดํŒ… ์ •๋ ฌ ๋“ฑ์œผ๋กœ ๋งŽ์ด ๋ถˆ..

st-lab.tistory.com

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort)
'๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ฐฑํŠธ๋ž˜ํ‚น(Back-Tracking)
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (feat. Factorial, Fibonacci)
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Merge Sort (๋ถ„ํ•  ์ •๋ณต, ๋ณ‘ํ•ฉ ์ •๋ ฌ)
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด - ์†Œ์ˆ˜ ํŒ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
์•Œ๊ณ ๋ฆฌ์ฆ˜ - Counting Sort (์นด์šดํŒ… ์ •๋ ฌ / ๊ณ„์ˆ˜ ์ •๋ ฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.